এই সমস্যায় একটি স্ট্রিং এবং একটি পূর্ণসংখ্যা M দেওয়া আছে। আমাদের দৈর্ঘ্য M-এর সব স্বতন্ত্র সার্কুলার স্ট্রিংগুলো লেক্সিকোগ্রাফিক্যাল অর্ডারে (বর্ণানুক্রমিকভাবে) প্রিন্ট করতে হবে।
উদাহরণ
ইনপুট: str = "ssssn", M = 3 আউটপুট: nss sns ssn sss
ব্যাখ্যা - দৈর্ঘ্য ৩-এর সব সম্ভাব্য সার্কুলার স্ট্রিং: sss sss ssn sns nss। স্বতন্ত্র উপাদানগুলো লেক্সিকোগ্রাফিক্যাল অর্ডারে: sss ssn sns nss।
এই সমস্যাটি সমাধানের জন্য স্ট্রিংয়ের উপাদানগুলোতে ইটারেট করে দৈর্ঘ্য M-এর সব সম্ভাব্য সাবস্ট্রিং তৈরি করা হবে। তৈরি স্ট্রিংগুলো একটি সেটে সংরক্ষণ করা হবে যা শুধু স্বতন্ত্র উপাদান রাখে এবং ডুপ্লিকেট বাদ দিয়ে দেয়। সেটটি এই উপাদানগুলো লেক্সিকোগ্রাফিক্যাল অর্ডারে রাখে। সেটের সব উপাদান শুরু থেকে প্রিন্ট করা হবে।
এই অ্যালগরিদমের জটিলতা সাবস্ট্রিংর আকার এবং স্ট্রিংর দৈর্ঘ্যের উপর নির্ভর করে। সময় জটিলতা = O(N*M)।
বাস্তবায়ন
#include <bits/stdc++.h>
using namespace std;
void printCircularString(string s, int l, int m) {
set<string> circularString;
s = s + s;
for (int i = 0; i < l; i++) {
circularString.insert(s.substr(i, m));
}
while (!circularString.empty()) {
cout << *circularString.begin() << "\t";
circularString.erase(circularString.begin());
}
}
int main() {
string str = "ssssn";
int N = str.length();
int M = 3;
cout << "All circular strings of length " << M << " from the string '" << str << "' are:\n";
printCircularString(str, N, M);
return 0;
}
আউটপুট
All circular strings of length 3 from the string 'ssssn' are : nss sns ssn sss