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

C++ में ब्रेस एक्सपेंशन


मान लीजिए हमारे पास एक स्ट्रिंग S है जो शब्दों की सूची को दर्शाती है। यहां शब्द में प्रत्येक अक्षर के 1 या अधिक विकल्प होते हैं। यदि केवल एक विकल्प है, तो अक्षर को जैसा है वैसा ही दर्शाया जाता है। यदि एक से अधिक विकल्प हैं, तो कर्ली ब्रेसेस विकल्पों को सीमांकित करते हैं। इसलिए उदाहरण के लिए, "{a,b,c}" विकल्प ["a", "b", "c"] को दर्शाएगा। अब उदाहरण के लिए, अगर इनपुट "{a,b,c}d{e,f}" है तो यह सूची ["ade", "adf", "bde", "bdf", "cde", "cdf"] को दर्शाएगा।

इस तरीके से बनने वाले सभी शब्दों को लेक्सिकोग्राफिकल क्रम में लौटाएं।

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

  • ret नामक एक सरणी परिभाषित करें, n नामक एक पूर्णांक प्रकार का चर परिभाषित करें

  • solve() नामक एक मेथड परिभाषित करें, यह इंडेक्स, लिस्ट और curr को इनपुट के रूप में लेगा

  • यदि इंडेक्स = n, तो curr को ret में डालें और लौटें

  • i को 0 से लिस्ट[इंडेक्स] के आकार तक रेंज में लिए:

    • solve(इंडेक्स + 1, लिस्ट, curr + लिस्ट[इंडेक्स, i]) कॉल करें

  • मुख्य मेथड से, निम्नलिखित करें:

  • आकार 100 की एक लिस्ट बनाएं, n := 0 सेट करें, फ्लैग := फाल्स

  • i को 0 से s के आकार - 1 तक रेंज में लिए:

    • यदि s[i] कॉमा है, तो अगले इटरेशन पर जाएं

    • अन्यथा जब s[i] ओपनिंग ब्रेस है, तो फ्लैग := ट्रू सेट करें

    • अन्यथा जब s[i] क्लोजिंग ब्रेस है, तो फ्लैग := फाल्स सेट करें और n को 1 से बढ़ाएं

    • अन्यथा लिस्ट[n] को s[i] से बढ़ाएं, अब यदि फ्लैग फाल्स है, तो n को 1 से बढ़ाएं

  • solve(0, लिस्ट, खाली स्ट्रिंग) कॉल करें

  • ret सरणी को सॉर्ट करें

  • ret लौटाएं

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

#include <bits/stdc++.h> using namespace std; class Solution {    public:    vector <string> ret;    int n;    vector<string> expand(string s) {       vector <string> list(100);       n = 0;       int flag = false;       for(int i = 0; i < s.size(); i++){          if(s[i] == ','){             continue;          }else if(s[i] == '{'){             flag = true;           }else if(s[i] == '}'){             flag = false;             n++;           }else{             list[n] += s[i];             if(!flag)n++;           }       }       solve(0, list);       sort(ret.begin(), ret.end());       return ret;    }    void solve(int idx, vector <string> list, string curr = ""){       if(idx == n){          ret.push_back(curr);          return;       }       for(int i = 0; i < list[idx].size(); i++){          solve(idx + 1, list, curr + list[idx][i]);       }    } }; main(){    Solution ob;    print_vector(ob.expand("{a,b}c{d,e}f")); }

इनपुट

"{a,b}c{d,e}f"

आउटपुट

[acdf, acef, bcdf, bcef, ]

  1. - C++ में Switch स्टेटमेंट: एक पूर्ण गाइड

    C++ में Switch स्टेटमेंट का उपयोग कैसे करें कंडीशनल स्टेटमेंट्स सभी प्रोग्रामिंग भाषाओं की एक सामान्य विशेषता हैं। इन स्टेटमेंट्स का उपयोग प्रोग्राम के प्रवाह को नियंत्रित करने और यह निर्दिष्ट करने के लिए किया जाता है कि कोड के विशिष्ट ब्लॉक्स कब निष्पादित होने चाहिए। C++ में उपयोग किए जाने वाले मुख

  1. - C++ में मितव्ययी संख्या (Frugal Number)

    इस समस्या में, हमें एक धनात्मक पूर्णांक N दिया गया है। हमारा कार्य यह जांचने के लिए एक प्रोग्राम बनाना है कि दी गई संख्या मितव्ययी संख्या है या नहीं। मितव्ययी संख्या (FRUGAL NUMBER) − एक संख्या जिसके अंकों की संख्या उस संख्या के अभाज्य गुणनखंडन में अंकों की संख्या से सख्ती से अधिक है। उदाहरण &

  1. C++ में पेंटाटोप संख्या C++ में पेंटाटोप संख्या

    एक पेंटाटोप संख्या को पास्कल के त्रिभुज में पांचवीं संख्या के रूप में वर्णित किया गया है। अब, चूंकि यह पांचवीं संख्या है, इसका मतलब है कि पास्कल के त्रिभुज में कम से कम पांच संख्याएं होनी चाहिए, इसलिए इस श्रृंखला की पहली संख्या 1 4 6 4 1 से शुरू होती है जो पास्कल के त्रिभुज की चौथी पंक्ति है। तो, इस