原題地址899. 有序隊列
給出了一個由小寫字母組成的字符串 S
。然後,我們可以進行任意次數的移動。
在每次移動中,我們選擇前 K
個字母中的一個(從左側開始),將其從原位置移除,並放置在字符串的末尾。
返回我們在任意次數的移動之後可以擁有的按字典順序排列的最小字符串。
示例 1:
輸入:S = "cba", K = 1
輸出:"acb"
解釋:
在第一步中,我們將第一個字符(“c”)移動到最後,獲得字符串 “bac”。
在第二步中,我們將第一個字符(“b”)移動到最後,獲得最終結果 “acb”。
示例 2:
輸入:S = "baaca", K = 3
輸出:"aaabc"
解釋:
在第一步中,我們將第一個字符(“b”)移動到最後,獲得字符串 “aacab”。
在第二步中,我們將第三個字符(“c”)移動到最後,獲得最終結果 “aaabc”。
提示:
1 <= K <= S.length <= 1000
S 只由小寫字母組成。
算法
K>1,相當於可以任意排列,所以直接返回最小值
K==1,遍歷所有最小字母爲首字母的情況就好了
代碼
class Solution:
def orderlyQueue(self, S, K):
"""
:type S: str
:type K: int
:rtype: str
"""
if K > 1:
lst = list(S)
lst.sort()
return ''.join(lst)
min_char = min(set(S))
ans = S
for i in range(len(S)):
if S[i] == min_char:
ans = min(ans, S[i:] + S[:i])
return ans