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

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

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

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

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

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

  • मैं के लिए 0 से S के आकार की सीमा में

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

    • अन्यथा

      • सेंट में c डालें

      • जबकि सेंट का आकार>=3

        • c :=सेंट के ऊपर और सेंट से शीर्ष तत्व को पॉप करें

        • b :=सेंट के ऊपर और सेंट से शीर्ष तत्व को पॉप करें

        • a:=सेंट के ऊपर और सेंट से शीर्ष तत्व को पॉप करें

        • अस्थायी :=एक के साथ अस्थायी संयोजन

        • अस्थायी:=अस्थायी बी के साथ संयोजित करें

        • अस्थायी:=सी के साथ अस्थायी रूप से संयोजित करें

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

        • अन्यथा

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

    • सही लौटें, जब सेंट खाली हो, अन्यथा झूठी वापसी करें

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

उदाहरण

#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();
   }
};
main(){
   Solution ob;
   cout << (ob.isValid("abcabcababcc"));
}

इनपुट

“abcabcababcc”

आउटपुट

1

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

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

  1. C++ प्रोग्राम यह जांचने के लिए कि क्या दो चित्र रोटेशन और अनुवाद के बाद मेल खाते हैं

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

  1. C++ में मान्य सुडोकू

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