899. Orderly Queue
A string S of lowercase letters is given. Then, we may make any number of moves.
In each move, we choose one of the first K letters (starting from the left), remove it, and place it at the end of the string.
Return the lexicographically smallest string we could have after any number of moves.
Example 1:
Input: S = "cba", K = 1
Output: "acb"
Explanation:
In the first move, we move the 1st character ("c") to the end, obtaining the string "bac".
In the second move, we move the 1st character ("b") to the end, obtaining the final result "acb".
Example 2:
Input: S = "baaca", K = 3
Output: "aaabc"
Explanation:
In the first move, we move the 1st character ("b") to the end, obtaining the string "aacab".
In the second move, we move the 3rd character ("c") to the end, obtaining the final result "aaabc".
Note:
1 <= K <= S.length <= 1000
S consists of lowercase letters only.
Approach
题目大意:给定一个字符串s和整数K,允许字符串的前K个字符中任意一个被移动到字符串末尾,然后返回最小字典序的字符串。
解题思路:当K==1时,只能旋转这个字符串,所以我们就旋转字符串,找到最小的;当K>1时,不仅可以旋转字符串,还可以交换任意两个相邻的字符而不改变其他字符的顺序,所以我们可以直接对字符串排序,找到最小。
Code
class Solution {
public:
string orderlyQueue(string S, int K) {
if (K > 1) {
sort(S.begin(), S.end());
return S;
}
string res = S;
for (int i = 0; i < S.size(); i++) {
res = min(res, S.substr(i) + S.substr(0, i));
}
return res;
}
};
本文深入探讨了LeetCode上的OrderlyQueue问题,一种通过移动字符串前K个字符并将其置于末尾来寻找最小字典序字符串的算法。文章详细解释了解题思路,包括当K大于1时直接排序字符串,以及K等于1时通过旋转字符串查找最小值的方法。
1086

被折叠的 条评论
为什么被折叠?



