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 };

猜你喜欢

转载自www.cnblogs.com/leo-lzj/p/9996450.html