767 重構字串

2021-10-11 15:18:12 字數 1233 閱讀 6003

767. 重構字串

給定乙個字串s,檢查是否能重新排布其中的字母,使得兩相鄰的字元不同。

若可行,輸出任意可行的結果。若不可行,返回空字串。

示例 1:

輸入: s = "aab"

輸出: "aba"

示例 2:

輸入: s = "aaab"

輸出: ""

注意:s 只包含小寫字母並且長度在[1, 500]區間內。

基本思路:貪心演算法,首先使用雜湊表統計各個字元的個數,如果有字元個數超過總長度的一半((len+1)/2,len為奇數/偶數),那麼一定無法做到隔離。

string reorganizestring(string s) 

}int odd=1,even=0;

for(int i=0;i0&&dict[i]<(len)/2+1&&odd0)

}return ans;

}

基本思路: 基本思路同上,不過新增了資訊很有創意

string reorganizestring(string s) 

}for(int i=0;i=len)

idx=0;

ans[idx]=ch;

idx+=2;}}

return ans;

}

基本思路:桶思想,類似與先將字串分為很多段,每一段裡放置不重複的字串,保證相鄰段(桶),相同字元相差乙個桶的大小,當其times=2時,並且滿足上述臨界條件,可以退化為偶數字放(len+1)/2,奇數字放其他字元。

class solution 

vector> vec;

for(auto &x:dict)

vec.push_back(x);

sort(vec.begin(),vec.end(),cmp);

int rounds=vec[0].second;

//coutreturn "";

string ans;

int rectify_time=s.size()/rounds+1; //桶的大小,保證同乙個字元相差一輪

while(vec[0].second>0)

i++;

}sort(vec.begin(),vec.end(),cmp);

}return ans;

}};

767 重構字串

重構字串 題目描述提示幫助提交記錄社群討論閱讀解答 隨機一題 給定乙個字串s,檢查是否能重新排布其中的字母,使得兩相鄰的字元不同。若可行,輸出任意可行的結果。若不可行,返回空字串。示例 1 輸入 s aab 輸出 aba 示例 2 輸入 s aaab 輸出 注意 s 只包含小寫字母並且長度在 1,5...

767 重構字串

給定乙個字串s,檢查是否能重新排布其中的字母,使得兩相鄰的字元不同。若可行,輸出任意可行的結果。若不可行,返回空字串。public string reorganizestring string s int counts new int 26 int maxcount 0 int length s.l...

767 重構字串

給定乙個字串s,檢查是否能重新排布其中的字母,使得兩相鄰的字元不同。若可行,輸出任意可行的結果。若不可行,返回空字串。示例 1 輸入 s aab 輸出 aba 示例 2 輸入 s aaab 輸出 注意 s 只包含小寫字母並且長度在 1,500 區間內。1.排序然後把大的先放好 空乙個位置一放 然後小...