767 重構字串 (貪心堆)

2021-10-10 23:05:34 字數 1118 閱讀 4015

leetcode: 767. 重構字串

看看資料範圍 >> [1,

500]

[1, 500]

[1,500

] >> 應該可以暴力 貪心

先記錄所有字元出現的次數, 然後拼接字元傳串的時候, 每次取出剩餘字串第一大和第二大的 (同時取 >> 這樣能避免重複取最大的兩次)

去完後後更新序列陣列 (從大到小)

思路是有了, 用什麼演算法實現呢。。。一直沒想出來。 真就除了暴力我啥也不會了。

該題思路:大致上面寫的

使用優先佇列構建小頂堆 ( 維護乙個從大到小的序列

每次取出頂上兩個

最後檢視queue 中是否還剩1個

在字串長度為 n 的情況下,如果有乙個字母出現的次數超過 (n+1) / 2,這時候就不存在這樣一種排列。

貪心堆

class

charnode

}class

solution})

;int

arr =

newint[26

];// 初始化

for(

int i =

0; i < len; i++

)for

(int i =

0; i <

26; i++)}

// for (charnode c :queue.toarray(new charnode[0]))

stringbuffer sb =

newstringbuffer()

;while

(queue.

size()

>=2)

// 還剩乙個唄

if(queue.

size()

>

0) sb.

(queue.

poll()

.c +"")

;return sb.

tostring();}}

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 重構字串

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