इस समस्या में, हमें एक स्ट्रिंग और एक पूर्णांक 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हैं