題目描述:給你乙個字串 s ,請你根據下面的演算法重新構造字串:從 s 中選出 最小 的字元,將它 接在 結果字串的後面。從 s 剩餘字元中選出 最小 的字元,且該字元比上乙個新增的字元大,將它 接在 結果字串後面。重複步驟 2 ,直到你沒法從 s 中選擇字元。從 s 中選出 最大 的字元,將它 接在 結果字串的後面。從 s 剩餘字元中選出 最大 的字元,且該字元比上乙個新增的字元小,將它 接在 結果字串後面。重複步驟 5 ,直到你沒法從 s 中選擇字元。重複步驟 1 到 6 ,直到 s 中所有字元都已經被選過。在任何一步中,如果最小或者最大字元不止乙個 ,你可以選擇其中任意乙個,並將其新增到結果字串。請你返回將 s 中字元重新排序後的 結果字串 。
解題思路:直接遍歷一遍字串,用長度為26的陣列記錄每個字母(26個)出現的次數,不斷的公升序和降序遍歷陣列,只要當前字母的次數不為零,就新增到最終結果中,新增之後就將對應的字母次數減一,知道所有字母都被選擇完畢,就返回結果,**如下:
class
solution
:def
sortstring
(self, s:
str)
->
str:
alpha_map =[0
]*26for c in s:
index =
ord(c)
-ord
('a'
) alpha_map[index]+=1
res =
'' size =
len(s)
while
(len
(res)
< size)
:for i in
range(26
):if alpha_map[i]
: res +=
chr(i+97)
alpha_map[i]-=1
iflen
(res)
< size:
for i in
range(25
,-1,
-1):
if alpha_map[i]
: res +=
chr(i+97)
alpha_map[i]-=1
return res
1370 上公升下降字串
題目描述 給你乙個字串 s 請你根據下面的演算法重新構造字串 從 s 中選出 最小 的字元,將它 接在 結果字串的後面。從 s 剩餘字元中選出 最小 的字元,且該字元比上乙個新增的字元大,將它 接在 結果字串後面。重複步驟 2 直到你沒法從 s 中選擇字元。從 s 中選出 最大 的字元,將它 接在 ...
1370 上公升下降字串
上公升下降字串 給你乙個字串 s 請你根據下面的演算法重新構造字串 從 s 中選出 最小 的字元,將它 接在 結果字串的後面。從 s 剩餘字元中選出 最小 的字元,且該字元比上乙個新增的字元大,將它 接在 結果字串後面。重複步驟 2 直到你沒法從 s 中選擇字元。從 s 中選出 最大 的字元,將它 ...
1370 上公升下降字串
給你乙個字串s,請你根據下面的演算法重新構造字串 1 從 s 中選出 最小 的字元,將它 接在 結果字串的後面。2 從 s 剩餘字元中選出 最小 的字元,且該字元比上乙個新增的字元大,將它 接在 結果字串後面。3 重複步驟 2 直到你沒法從 s 中選擇字元。4 從 s 中選出 最大 的字元,將它 接...