有序队列在 C++ 中
假设出现字符串 S。S 中的所有字母均为小写。然后,可以执行任意多次移动。
在此,在每次移动中,我们选择前 K 个字母中的一个,将其删除,并将其放在字符串的末尾。我们必须找到任意多次移动后可能获得的按字典序最小的字符串。
因此,如果输入类似于 "cabaa" 并且 K = 3,则输出将为 "aaabc"
要解决此问题,我们将遵循以下步骤 -
如果 K > 1,则 -
对数组 S 进行排序
返回 S
ret := S
n := S 的大小
对于初始化 i := 1,当 i < n,更新(使 i 增加 1),执行 -
S := 裁切 S 的第一个字符并在结尾处将其添加到 S 中
如果 S < ret,则 -
ret = S
返回 ret
让我们看看以下实现以获得更好的理解 -
示例
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
string orderlyQueue(string S, int K) {
if(K > 1){
sort(S.begin(), S.end());
return S;
}
string ret = S;
int n = S.size();
for(int i = 1; i < n; i++){
S = S.substr(1) + S.substr(0, 1);
if(S < ret) ret = S;
}
return ret;
}
};
main(){
Solution ob;
cout << (ob.orderlyQueue("cabaa", 3));
}输入
"cabaa", 3
输出
aaabc
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP