有序佇列在 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