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

C++ में प्रतिस्थापन के बाद शब्द वैध है या नहीं जांचें


मान लीजिए हमें दिया गया है कि स्ट्रिंग "abc" वैध है। तो किसी भी वैध स्ट्रिंग V से, हम V को दो टुकड़ों X और Y में विभाजित कर सकते हैं जैसे कि X + Y, V के समान है। (X या Y खाली हो सकते हैं।) फिर, X + "abc" + Y भी वैध है। इसलिए उदाहरण के लिए S = "abc", तो वैध स्ट्रिंग्स के उदाहरण हैं: "abc", "aabcbc", "abcabc", "abcabcababcc"। और कुछ अवैध स्ट्रिंग्स के उदाहरण हैं: "abccba", "ab", "cababc", "bac"। हमें तभी true जांचना है जब दी गई स्ट्रिंग S वैध हो।

इसलिए यदि इनपुट "abcabcababcc" जैसा है, तो यह वैध है, इसलिए आउटपुट true होगा।

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

  • एक स्टैक st परिभाषित करें

  • i को 0 से S के आकार तक के लिए

    • यदि st खाली है या S[i] 'c' के समान नहीं है, तो S[i] को स्टैक में पुश करें

    • अन्यथा

      • c को st में सम्मिलित करें

      • जब तक st का आकार >= 3

        • c := st का शीर्ष और st से शीर्ष तत्व पॉप करें

        • b := st का शीर्ष और st से शीर्ष तत्व पॉप करें

        • a := st का शीर्ष और st से शीर्ष तत्व पॉप करें

        • temp := temp को a के साथ जोड़ें

        • temp := temp को b के साथ जोड़ें

        • temp := temp को c के साथ जोड़ें

        • यदि temp "abc" है, तो अगले पुनरावृत्ति के लिए जाएं

        • अन्यथा

          • a, फिर b, फिर c को st में पुश करें, और लूप तोड़ें

    • true लौटाएं जब st खाली हो, अन्यथा false लौटाएं

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

    उदाहरण

    #include <bits/stdc++.h>
    using namespace std;
    
    class Solution {
    public:
        bool isValid(string S) {
            stack <char> st;
            for(int i = 0; i < S.size(); i++) {
                if(st.empty() || S[i] != 'c') {
                    st.push(S[i]);
                } else {
                    st.push('c');
                    while(st.size() >= 3) {
                        char c = st.top();
                        st.pop();
                        char b = st.top();
                        st.pop();
                        char a = st.top();
                        st.pop();
                        string temp = "";
                        temp += a;
                        temp += b;
                        temp += c;
                        if(temp == "abc") {
                            continue;
                        } else {
                            st.push(a);
                            st.push(b);
                            st.push(c);
                            break;
                        }
                    }
                }
            }
            return st.empty();
        }
    };
    
    int main() {
        Solution ob;
        cout << (ob.isValid("abcabcababcc"));
    }

    इनपुट

    "abcabcababcc"

    आउटपुट

    1
  1. - C++ कोड: त्रिकोणीय संख्या की जांच करें

    मान लीजिए हमारे पास एक संख्या n है। हमें जांचना है कि क्या संख्या त्रिकोणीय संख्या है या नहीं। जैसा कि हम जानते हैं, यदि n डॉट्स (या गेंदों) को परतों में व्यवस्थित करके एक समबाहु त्रिकोण बनाया जा सकता है तो n एक त्रिकोणीय संख्या है।उदाहरण के लिए, यदि इनपुट n = 10 है, तो आउटपुट True होगा।चरणइसे हल कर

  1. - घूर्णन और अनुवाद के बाद दो छवियों के मिलान की जाँच करने का C++ प्रोग्राम

    मान लीजिए दो n × n पिक्सेल वर्ग छवियाँ first और second हैं। पिक्सेल या तो काले या सफेद हो सकते हैं। छवियों को मैट्रिक्स प्रतिनिधित्व में दिया गया है जहाँ काला पिक्सेल x से और सफेद पिक्सेल . से दर्शाया जाता है। हमें जाँचना है कि second छवि 90° घूर्णन और अनुवाद के बाद first छवि से मेल खाती है या नहीं

  1. C++ में वैलिड सुडोकू C++ में वैलिड सुडोकू

    मान लीजिए हमें 9×9 मैट्रिक्स दिया गया है जिसे सुडोकू कहा जाता है। कार्य यह जांचना है कि दिया गया सुडोकू पैटर्न मान्य है या नहीं। सामान्य तौर पर, एक सुडोकू बोर्ड इस तरह दिखता है, सुडोकू के नियम - हर रो में 1-9 की रेंज में एक नंबर होता है हर कॉलम में 1-9 की रेंज में नंबर होते हैं। 3×3 का प्रत्येक ब्