สมมติว่ามีสตริง 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