Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में लंबाई M के सभी विशिष्ट सर्कुलर स्ट्रिंग्स को लेक्सिकोग्राफिकल ऑर्डर में प्रिंट करना


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

  1. - C++ में वर्णों की पुनरावृत्ति के साथ सभी क्रमपरिवर्तन प्रिंट करें

    इस समस्या में, हमें n वर्णों की एक स्ट्रिंग दी गई है और हमें स्ट्रिंग के वर्णों के सभी क्रमपरिवर्तन प्रिंट करने हैं। स्ट्रिंग के वर्णों को दोहराने की अनुमति है। क्रमपरिवर्तन की प्रिंटिंग वर्णमाला क्रम में (लेक्सिकोग्राफिकली क्रमबद्ध क्रम) में की जानी चाहिए। विषय को बेहतर ढंग से समझने के लिए एक उदाहर

  1. - C++ में ब्रैकेट रूप में स्ट्रिंग को तोड़ने के सभी तरीके प्रिंट करें

    इस समस्या में, हमें एक स्ट्रिंग दी गई है और हमें इसे उपस्ट्रिंग में तोड़ना है और उन्हें ब्रैकेट में संलग्न करके प्रिंट करना है। आइए कुछ उदाहरण लेकर इस समस्या को बेहतर ढंग से समझते हैं, Input : wxyz Output : (w) (x) (y) (z) (w) (x) (yz) (w) (xy) (z) (w) (xyz) (wx) (y) (z) (wx)

  1. - C++ में एक स्ट्रिंग को दूसरे में कॉपी किए बिना स्ट्रिंग्स की सरणी को सॉर्ट क्रम में प्रिंट करें

    स्ट्रिंग को दूसरे में कॉपी किए बिना सॉर्ट क्रम में स्ट्रिंग्स की सरणी प्रिंट करने की समस्या में, हमें स्ट्रिंग्स की सरणी को सॉर्ट करना होगा। यहां प्रोग्रामर सॉर्ट करते समय एक स्ट्रिंग को दूसरी स्ट्रिंग में कॉपी नहीं कर सकता। आइए एक उदाहरण लेकर अवधारणा को बेहतर ढंग से समझते हैं : उदाहरण - Input : {De