LeetCode 字串 重構字串

2022-08-20 08:51:10 字數 939 閱讀 7976

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

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

示例:

輸入: s = "aab"

輸出: "aba"

輸入: s = "aaab"

輸出: ""

說明:

假設 s 中有多個 a,則我們想讓字串排成 axaxax 的形式。我們可以先統計每個字元出現的次數,然後利用間隔插值的方法來將字元插入乙個長度為 s.size() 的陣列中,最後將陣列轉為字串返回。

我們將 s 中的每乙個字元編碼成乙個數字 n,n/100 表示字元出現的次數,n%100+'a' 表示該字元。例如,假設 s='aabbb',則 'b' 被編碼為 301。這樣做的好處是我們可以只通過編碼獲得該編碼對應的字元以及該字元出現的次數。

字元的編碼儲存在陣列 code 中,然後我們將 code 中的元素公升序排序,排序前 code[i] 表示的字元是 i+'a',排序後就不能這麼對應了,但是我們可以通過 code[i] 的編碼來推出 code[i] 對應的是哪個字元。公升序排序的目的是先將出現次數較少的字元插入到答案中,然後再插入出現次數較多的字元。這樣可以避免出錯。

遍歷 code,根據 code 中的值解碼得到字元和該字元出現的次數,然後將其插入到陣列中即可。

**如下:

class solution 

}string ansstr(ans.begin(), ans.end());

return ansstr;

}};

這個插入方式很特別,首先令 t = 1,如果 t>=s.size(),就將 t 重置為 0;否則 t += 2.

solution/zhong-gou-zi-fu-chuan-by-leetcode/

重構字串

給定乙個字串s,檢查是否能重新排布其中的字母,使得兩相鄰的字元不同。若可行,輸出任意可行的結果。若不可行,返回空字串。輸入 s aab 輸出 aba 輸入 s aaab 輸出 string reorganizestring string s 判斷是否能夠重構 if h 0 second s.size...

重構字串

給定乙個字串s,檢查是否能重新排布其中的字母,使得兩相鄰的字元不同。若可行,輸出任意可行的結果。若不可行,返回空字串。示例1 輸入 s aab 輸出 aba 示例 2 輸入 s aaab 輸出 void main unordered map int,int mp int maxlen 0 for i...

LeetCode 字串 反轉字串

反轉字串 編寫乙個函式,其作用是將輸入的字串反轉過來。輸入字串以字元陣列char的形式給出。不要給另外的陣列分配額外的空間,你必須原地修改輸入陣列 使用 o 1 的額外空間解決這一問題。你可以假設陣列中的所有字元都是 ascii 碼表中的可列印字元。示例 1 輸入 h e l l o 輸出 o l ...