前往
大廳
主題

LeetCode - 1370. Increasing Decreasing String 解題心得

Not In My Back Yard | 2023-02-07 12:00:08 | 巴幣 0 | 人氣 183

題目連結:


題目意譯:
你被給定一字串 s。使用以下演算法將字串重新排序字串:
(注:原題敘沒有將下列步驟編號,在此補上以幫助理解)
1. 將 s 中最小的字元挑出來並放到結果字串的尾端。
2. 將 s 中最小的字元,其中該字元大於上一個挑的字元,挑出來後並放到結果字串的尾端。
3. 重複步驟 2 直到你不能再挑任何字元。
4. 將 s 中最大的字元挑出來並放到結果字串的尾端。
5. 將 s 中最大的字元,其中該字元小於上一個挑的字元,挑出來後並放到結果字串的尾端。
6. 重複步驟 5 直到你不能再挑任何字元。
7. 重複步驟 1 到 6 直到你把 s 中所有字元挑走為止。

在每一步之中,如果最小或最大字元出現多於一次,則你可以選擇任一者並放到結果字串的尾端。

回傳將 s 按照演算法排序後的結果字串。

限制:
1 ≦ s.length ≦ 500
s 只由小寫英文字母組成。



範例測資:
範例 1:
輸入: s = "aaaabbbbcccc"
輸出: "abccbaabccba"
解釋: 第一次疊代中,在第 1 、 2 和 3 步後,result = "abc"
第一次疊代中,在第 4 、 5 和 6 步後,result = "abccba"
第一次疊代就此結束。現在 s = "aabbcc,而我們重新回到第 1 步。
第二次疊代中,在第 1 、 2 和 3 步後,result = "abccbaabc"
第二次疊代中,在第 4 、 5 和 6 步後,result = "abccbaabccba"

範例 2:
輸入: s = "rat"
輸出: "art"
解釋: 利用提及的演算法重新排列後的字詞 "rat" 將變成 "art"。


解題思維:
首先把 s 中每一種字元的出現次數統計出來,存在一陣列之中。

然後我們可以看到步驟 1 ~ 3 其實就等價從字元 'a' 掃到字元 'z',然後看哪些字元有出現在 s 中,並將其加到結果字串的尾端(記得在統計次數的陣列中將對應字元的次數減 1)。

而步驟 4 ~ 6 也是類似的情況,只是是從 'z' 掃到 'a'。

因此我們只要重複以上步驟直到結果字串的長度等於 s 原先的長度即可(代表此時已經把 s 中的字母挑光了)。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作