Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

คิวที่เป็นระเบียบในภาษา C++


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