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