সমস্যা বিবরণ
স্ট্রিং S এবং K দেওয়া থাকলে, প্রতিটি মুভে প্রথম K ক্যারেক্টার থেকে একটা নিয়ে শেষে যুক্ত করতে পারব। যেকোনো সংখ্যক মুভের পর লেক্সিকোগ্রাফিক্যালি সবচেয়ে ছোট স্ট্রিং বের করতে হবে।
উদাহরণ
S = "cabaa", K = 3 → আউটপুট = "aaabc"
সমাধান পদ্ধতি
- K > 1 হলে যেকোনো পারমুটেশন সম্ভব, তাই স্ট্রিং সর্ট করে রিটার্ন করুন।
- K = 1 হলে শুধু রোটেশন সম্ভব, সব রোটেশন চেক করে মিনিমাম বের করুন।
C++ বাস্তবায়ন
#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;
}
};
int main() {
Solution ob;
cout << ob.orderlyQueue("cabaa", 3);
return 0;
}
ইনপুট ও আউটপুট
ইনপুট: "cabaa", 3
আউটপুট: aaabc