इस समस्या में, हमें एक स्ट्रिंग और एक पूर्णांक M दिया गया है। हमारा कार्य लंबाई M के सभी विशिष्ट सर्कुलर स्ट्रिंग्स को लेक्सिकोग्राफिकल ऑर्डर (वर्णमाला क्रम) में प्रिंट करना है।
उदाहरण
Input: str = "ssssn" M = 3 Output: nss sns ssn sss
व्याख्या - लंबाई 3 के सभी संभावित सर्कुलर स्ट्रिंग्स हैं: 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