1370 上公升下降字串

2021-10-09 22:05:00 字數 1698 閱讀 8668

題目描述:

給你乙個字串 s ,請你根據下面的演算法重新構造字串:

從 s 中選出 最小 的字元,將它 接在 結果字串的後面。

從 s 剩餘字元中選出 最小 的字元,且該字元比上乙個新增的字元大,將它 接在 結果字串後面。

重複步驟 2 ,直到你沒法從 s 中選擇字元。

從 s 中選出 最大 的字元,將它 接在 結果字串的後面。

從 s 剩餘字元中選出 最大 的字元,且該字元比上乙個新增的字元小,將它 接在 結果字串後面。

重複步驟 5 ,直到你沒法從 s 中選擇字元。

重複步驟 1 到 6 ,直到 s 中所有字元都已經被選過。

在任何一步中,如果最小或者最大字元不止乙個 ,你可以選擇其中任意乙個,並將其新增到結果字串。

請你返回將 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」

示例 3:

輸入:s = 「leetcode」

輸出:「cdelotee」

示例 4:

輸入:s = 「ggggggg」

輸出:「ggggggg」

示例 5:

輸入:s = 「spo」

輸出:「ops」

1 <= s.length <= 500

s 只包含小寫英文本母。

方法1:

主要思路:

(1)使用大小26的陣列統計各個字元的個數;

(2)對統計陣列進行正反遍歷,每遍歷一次字元,將對應的字元新增到字串的結尾,同時將統計數量減1;

(3)在遍歷過程中,跳過統計數量為0 的字元,直到所有的統計數量都為0;

class

solution

;for

(char

& ch:s)

string res;

bool not_done=

true

;//標識所有字元的統計數量是否都為0

while

(not_done)}}

//說明所有字元的統計數量都為0if(

!not_done)

not_done=

false

;//反向遍歷

for(

int i=

25;i>=0;

--i)}}

}//返回

return res;}}

;

1370 上公升下降字串

上公升下降字串 給你乙個字串 s 請你根據下面的演算法重新構造字串 從 s 中選出 最小 的字元,將它 接在 結果字串的後面。從 s 剩餘字元中選出 最小 的字元,且該字元比上乙個新增的字元大,將它 接在 結果字串後面。重複步驟 2 直到你沒法從 s 中選擇字元。從 s 中選出 最大 的字元,將它 ...

1370 上公升下降字串

給你乙個字串s,請你根據下面的演算法重新構造字串 1 從 s 中選出 最小 的字元,將它 接在 結果字串的後面。2 從 s 剩餘字元中選出 最小 的字元,且該字元比上乙個新增的字元大,將它 接在 結果字串後面。3 重複步驟 2 直到你沒法從 s 中選擇字元。4 從 s 中選出 最大 的字元,將它 接...

1370 上公升下降字串

題目描述 給你乙個字串 s 請你根據下面的演算法重新構造字串 從 s 中選出 最小 的字元,將它 接在 結果字串的後面。從 s 剩餘字元中選出 最小 的字元,且該字元比上乙個新增的字元大,將它 接在 結果字串後面。重複步驟 2 直到你沒法從 s 中選擇字元。從 s 中選出 最大 的字元,將它 接在 ...