楼主:
pandix (面包屌)
2022-11-06 10:17:59899. Orderly Queue
龙大拿到了一组字串,他每次可以从前 k 个字符挑一个移到字串末,并且可以操作无限次
龙大希望这个字串的字典序越小越好,如果太大的话可能会有人一直讨论他
为了龙大的心理健康,请你帮他找出这个最小字典序的字串。
Example 1:
Input: s = "cba", k = 1
Output: "acb"
可以由 cba->bac->acb 得到
Example 2:
Input: s = "baaca", k = 3
Output: "aaabc"
可以由 baaca->aacab->aaabc 得到
思路:
1.先从简单版本开始想 如果 k=1 每次只能换第一个字符 可能性就只有 len(s) 种
就扫一次看谁最小就好
2.如果 k=2 可能性就多很多了 因为操作不限次数 可以想一下操作可以做到什么地步?
有没有办法只交换任意相邻两个字符的位置 如果可以其实就能 bubble sort
考虑 1234ab5678 如果要交换 ab
可以先把1234依序换到最后: ab56781234
接着换 a56781234b -> 56781234ba -> 1234ba5678
所以 k=2 就足以交换任意相邻字符的位置 也等同于能做到任意排列
最小的字典序字串只要直接 sort 就能得到
3.Python code:
class Solution:
def orderlyQueue(self, s: str, k: int) -> str:
if k > 1:
return ''.join(sorted(s))
return min([s[i:]+s[:i] for i in range(len(s))])