题目简介:
给定一个字符串 s
和一个整数 k
。你可以从 s
的前 k
个字母中选择一个,并把它加到字符串的末尾。
返回 在应用上述步骤的任意数量的移动后,字典上最小的字符串 。
示例 1:
1 2 3 4 5
| 输入:s = "cba", k = 1 输出:"acb" 解释: 在第一步中,我们将第一个字符(“c”)移动到最后,获得字符串 "bac"。 在第二步中,我们将第一个字符(“b”)移动到最后,获得最终结果 "acb"。
|
示例 2:
1 2 3 4 5
| 输入:s = "baaca", k = 3 输出:"aaabc" 解释: 在第一步中,我们将第一个字符(“b”)移动到最后,获得字符串 “aacab”。 在第二步中,我们将第三个字符(“c”)移动到最后,获得最终结果 “aaabc”。
|
提示:
1 <= k <= S.length <= 1000
s
只由小写字母组成。
思路:
有点类似于脑筋急转弯的题目,当k = 1
时,我们只需要将所有情况的字符串挨个比较一遍即可(即每次将首位字符移至最后)。
当k > 1
时,实际上字符串可以通过一直移动的方式变为升序字符串,所以只需要排个序就行了。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| class Solution { public: string orderlyQueue(string s, int k) {
if (k == 1){
string res = s;
string temp = s; for(int i = 0; i < s.size(); i++){
temp = temp.substr(1, temp.size() - 1) + temp[0];
if (temp < res) res = temp; }
return res; }
sort(s.begin(), s.end());
return s;
} };
|