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

C++ में लंबाई n के सभी हैप्पी स्ट्रिंग्स का k-वां लेक्सिकोग्राफिकल स्ट्रिंग


मान लीजिए हमारे पास एक स्ट्रिंग है। हम उसे हैप्पी स्ट्रिंग कहेंगे जब वह केवल ['a', 'b', 'c'] अक्षरों से बनी हो, और सभी i के लिए 1 से s की लंबाई - 1 तक s[i] != s[i + 1] हो (यहाँ स्ट्रिंग 1-इंडेक्स्ड है)।

इसलिए, यदि हमारे पास n और k जैसे दो इंटीजर हैं, तो लंबाई n के सभी हैप्पी स्ट्रिंग्स की सूची पर विचार करें जो लेक्सिकोग्राफिकल क्रम में सॉर्टेड है। हमें इस सूची का k-वां स्ट्रिंग ढूंढना है या खाली स्ट्रिंग लौटानी है यदि लंबाई n के हैप्पी स्ट्रिंग्स k से कम हैं।

इसलिए, यदि इनपुट है n = 3 और k = 9, तो आउटपुट "cab" होगा, 12 अलग-अलग हैप्पी स्ट्रिंग्स हैं, ये हैं ["aba", "abc", "aca", "acb", "bab", "bac", "bca", "bcb", "cab", "cac", "cba", "cbc"], 9वां "cab" है।

इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे:

  • एक ऐरे ret परिभाषित करें

  • एक फ़ंक्शन solve() परिभाषित करें, जो s, l (1 से इनिशियलाइज़) लेगा,

  • यदि l, x के समान है, तो -

    • s को ret के अंत में डालें

    • लौटें

  • i := 0 से शुरू करें, जब i < 3, i बढ़ाते हुए, करें -

    • यदि s का अंतिम एलिमेंट, c[i] के बराबर नहीं है, तो -

      • solve(s + c[i], l + 1)

  • मुख्य विधि से, निम्न करें -

  • x := n

  • यदि n, 0 के समान है, तो -

    • खाली स्ट्रिंग लौटाएं

  • solve("a")

  • solve("b")

  • solve("c")

  • ret ऐरे को सॉर्ट करें

  • लौटाएं (यदि k > ret का आकार, तो खाली स्ट्रिंग, अन्यथा ret[k - 1])

उदाहरण

बेहतर समझ के लिए निम्न कार्यान्वयन देखें:

#include <bits/stdc++.h> using namespace std; struct Cmp{    bool operator()(string& a, string& b) {       return !(a < b);    } }; char c[3] = {'a', 'b', 'c'}; class Solution { public:    vector<string> ret;    int x;    void solve(string s, int l = 1){       if (l == x) {          ret.push_back(s);          return;       }       for (int i = 0; i < 3; i++) {          if (s.back() != c[i]) {             solve(s + c[i], l + 1);          }       }    }    string getHappyString(int n, int k){       x = n;       if (n == 0)          return "";       solve("a");       solve("b");       solve("c");       sort(ret.begin(), ret.end());       return k > ret.size() ? "" : ret[k - 1];    } }; main(){    Solution ob;    cout << (ob.getHappyString(3,9)); }

इनपुट

3,9

आउटपुट

cab

  1. - C++ में स्ट्रिंग की लंबाई ढूंढने के 5 अलग-अलग तरीके

    स्ट्रिंग क्या है? कैरेक्टर्स का अनुक्रम या कैरेक्टर्स की रैखिक सरणी को स्ट्रिंग के रूप में जाना जाता है। इसकी घोषणा अन्य सरणियों को परिभाषित करने के समान है। सरणी की लंबाई स्ट्रिंग में कैरेक्टर्स की संख्या है। स्ट्रिंग की लंबाई ढूंढने के कई इन-बिल्ट मेथड और अन्य तरीके हैं। यहां, हम C++ में स्ट्रिं

  1. - C++ में स्ट्रिंग्स का ऐरे

    C++ में स्ट्रिंग कीवर्ड का उपयोग करके स्ट्रिंग्स का ऐरे बनाया जा सकता है। यहां हम इस दृष्टिकोण का उपयोग करके एक C++ प्रोग्राम पर चर्चा कर रहे हैं। एल्गोरिदम Begin स्ट्रिंग कीवर्ड द्वारा ऐरे के तत्वों को इनिशियलाइज़ करें। और स्ट्रिंग को इनपुट के रूप में लें। ऐरे प्रिंट करें। End. उदाहरण को

  1. - C++ में स्ट्रिंग की लंबाई खोजने का प्रोग्राम

    एक स्ट्रिंग एक एक-आयामी कैरेक्टर सरणी है जो नल कैरेक्टर द्वारा समाप्त होती है। स्ट्रिंग की लंबाई नल कैरेक्टर से पहले स्ट्रिंग में कैरेक्टर्स की संख्या होती है। उदाहरण के लिए। char str[] = “The sky is blue”; उपरोक्त स्ट्रिंग में कैरेक्टर्स की संख्या = 15 स्ट्रिंग की लंबाई खोजने का एक प्रो