LC-899 有序队列
目标:
给出一个字符串及数字K,字符串中的前K个字符中的一个可以取出放到队尾,求任意次操作后,字典序最小的字符串。
思路:
分两种情形,当K = 1时,因为每次只能移动队头的字符,所以要计算哪一次操作后,字符串字典序最小。而当K > 1时,前K个字符都可以移动,理论上字符串任意的组合,都可以通过操作变成,所以直接输出最小字典序字符串即可。
代码:
1 class Solution { 2 public: 3 string orderlyQueue(string S, int K) { 4 if (K == 1) { 5 string ans = S; 6 for (int i = 0; i < S.length(); i++) { 7 string temp = S.substr(i) + S.substr(0, i); 8 if (temp < ans) ans = temp; 9 } 10 return ans; 11 } else { 12 for (int i = 0; i < S.length(); i++) { 13 int min = i; 14 for (int j = i; j < S.length(); j++) { 15 if (S[j] < S[min]) min = j; 16 } 17 char temp = S[i]; 18 S[i] = S[min]; 19 S[min] = temp; 20 } 21 return S; 22 } 23 } 24 };