排序 LeetCode 767 重構字串

2021-10-08 10:19:20 字數 751 閱讀 1181

題面

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

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

題目分析

通過分析題目可以知道,在原字串種字母出現的順序是無關緊要的,因此我們可以運用桶思想或者開乙個map來表示字母和字母數量之間的關係。

當乙個字母的數量佔到整個字串的數量的一半以上的時候,可以證明無論怎讓都無法找到乙個滿足題意的字串。

那麼可以構建的時候如何去構建呢,一種簡單的方法是把某一種字母在偶數字上填滿然後再填滿奇數字。

ac**

// **是借鑑的大佬 我天才櫻木 的**...自己寫的太醜了

// 注意優先佇列的使用方法

class

solution

// 先判斷是否存在符合題意的字串

priority_queueint,

char

>

, vectorint,

char

>>

> q;

for(

auto m: maps));

}// 取出maps裡面的資料並排序

// 這裡不排序應該也沒有什麼問題

string res = s;

int i =0;

while

(!q.

empty()

)}return res;}}

;

錯誤反饋: [email protected]

Leetcode 767 重構字串

給定乙個字串s,檢查是否能重新排布其中的字母,使得兩相鄰的字元不同。若可行,輸出任意可行的結果。若不可行,返回空字串。示例 1 輸入 s aab 輸出 aba 示例 2 輸入 s aaab 輸出 注意 解題思路 任務排程問題,排序。本題有點像之前的乙個任務排程問題,由於題量太大,忘了哪乙個。統計當前...

leetcode 767 重構字串

描述 給定乙個字串s,檢查是否能重新排布其中的字母,使得兩相鄰的字元不同。若可行,輸出任意可行的結果。若不可行,返回空字串。示例 1 輸入 s aab 輸出 aba 示例 2 輸入 s aaab 輸出 注意 s 只包含小寫字母並且長度在 1,500 區間內。思路從小到大,交叉著插入 bool cmp...

LeetCode 767 重構字串

給定乙個字串s,檢查是否能重新排布其中的字母,使得兩相鄰的字元不同。若可行,輸出任意可行的結果。若不可行,返回空字串。示例 1 輸入 s aab 輸出 aba 示例 2 輸入 s aaab 輸出 注意 s 只包含小寫字母並且長度在 1,500 區間內。通過次數13,259 提交次數30,089思路 ...