题目链接:https://leetcode.cn/problems/orderly-queue/
思路
方式一、思维
计算字典序最小的字符串,我们需要讨论k = 1 和 k > 1时两种情况
当k = 1时,我们每次取 i 个首字符并将其移动到字符串末尾,对比找最小的字典序字符串即可
当k > 1时,一定可以经过移动将字符串s变成字符串按照升序排序
代码示例
func orderlyQueue(s string, k int) string {
if k == 1{
ans := s
for i := 1; i < len(s); i++{
s = s[1:] + s[:1]
if s < ans{
ans = s
}
}
return ans
}
ans := []byte(s)
sort.Slice(ans, func(i, j int) bool {return ans[i] < ans[j]})
return string(ans)
}
复杂度分析
- 时间复杂度:O(n2),其中n时字符串长度
- 当k = 1时,需要遍历n个字符串排列,每个字符串需要O(n)来判断是否为字典序最小,需要O(n2)的时间
- 当k > 1时,对字符串进行排序,需要O(n logn)的时间
- 空间复杂度:O(n),其中n时字符串长度,需要额外申请O(n)的空间