767 重構字串

2021-10-11 00:12:08 字數 997 閱讀 9667

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

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

public string reorganizestring(string s)

int[

]counts=new int[26]

; int maxcount=0;

int length=s.length();

for(int i=0;iif(maxcount>

(length+1)/2)

priorityqueue queue=new priorityqueue

(new comparator()

//這個佇列的優先順序是誰的數量多。

}); for(char c=

'a';c<=

'z';c++)

stringbuffer sb=new stringbuffer();

while(queue.size(

)>1)

if(counts[index2]

>0)

} if(queue.size(

)>0)

return sb.tostring();

}

思路:

1.首先判斷能不能完成,即當出現最多的那個字母的個數大於(n+1)/2,就不能完成。

2.用的最大堆,用各字元的出現個數組成最大堆,這個堆裡放的是出現次數大於一的字元(a出現5次,堆裡就有乙個a),每次發生出堆就要更新個字元的個數,重新排列堆

3.堆排列用的是優先佇列,並把優先順序設定成字元出現次數。

priorityqueue queue=new priorityqueue

(new comparator()

//這個佇列的優先順序是誰的數量多。

});queue.offer(c)//進隊

queue.poll(

)(c)//出隊

767 重構字串

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

767 重構字串

767.重構字串 給定乙個字串s,檢查是否能重新排布其中的字母,使得兩相鄰的字元不同。若可行,輸出任意可行的結果。若不可行,返回空字串。示例 1 輸入 s aab 輸出 aba 示例 2 輸入 s aaab 輸出 注意 s 只包含小寫字母並且長度在 1,500 區間內。基本思路 貪心演算法,首先使用...

767 重構字串

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