สมมติว่ามีสตริง S ตัวอักษรทั้งหมดใน S เป็นตัวพิมพ์เล็ก จากนั้น เราอาจจะทำการเคลื่อนไหวใดๆ
ในแต่ละการเคลื่อนไหว เราเลือกอักษร K ตัวแรก และนำออก และวางไว้ที่ส่วนท้ายของสตริง เราต้องหาสตริงพจนานุกรมที่เล็กที่สุดที่เราจะมีได้หลังจากการเคลื่อนไหวหลายครั้ง
ดังนั้น หากอินพุตเป็นเหมือน "cabaa" และ K =3 เอาต์พุตจะเป็น "aaabc"
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
ถ้า K> 1 แล้ว −
-
จัดเรียงอาร์เรย์ S
-
กลับ S
-
-
ret :=S
-
n :=ขนาด S
-
สำหรับการเริ่มต้น i :=1 เมื่อฉัน
-
S :=ตัดอักษรตัวแรกของ S แล้วใส่ท้ายตัว S
-
ถ้า 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