题目链接: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)的空间