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

C++ में कोष्ठकों की प्रत्येक जोड़ी के बीच रिवर्स सबस्ट्रिंग्स

मान लीजिए कि हमारे पास एक स्ट्रिंग है जिसमें छोटे अक्षर और कोष्ठक होते हैं। हमें मिलान करने वाले कोष्ठकों के प्रत्येक जोड़े में, अंतरतम से शुरू करते हुए, स्ट्रिंग्स को उल्टा करना होगा। और परिणाम में कोई कोष्ठक नहीं होना चाहिए। तो यदि इनपुट "(हेल (लोवो) आरएलडी)" जैसा है, तो आउटपुट "डीएलआरलोवोलेह" होगा, इसलिए शुरुआत से, इसे इस तरह बदल दिया जाता है:"(हेल (लोवो) आरएलडी)" → "(हेलोवोलर्ड)" → "dlrowoleh"।

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

  • n :=स्ट्रिंग का आकार, एक सरणी बनाएं जिसे par कहा जाता है जिसकी लंबाई n है, एक स्टैक st परिभाषित करें

  • मेरे लिए 0 से n - 1 की सीमा में

    • अगर s[i] कोष्ठक खोल रहा है, तो i को st में डालें

    • अन्यथा जब s[i] कोष्ठक बंद कर रहा हो, तब j :=st.pop(), par[i] :=j और par[j] :=i

  • एक खाली स्ट्रिंग रिट परिभाषित करें

  • i के लिए :=0, d :=1, i

    • अगर s[i] कोष्ठक खोल रहा है या s[i] कोष्ठक बंद कर रहा है, तो i :=par[i], d :=-d अन्यथा s[i]

      द्वारा रिट बढ़ाएं
  • वापसी रिट

उदाहरण (C++)

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   void out(vector <int>& v){
      for(int i = 0; i < v.size(); i++){
         cout << v[i] << " " ;
      }
      cout << endl;
   }
   string reverseParentheses(string s) {
      int n = s.size();
      vector <int> par(n);
      stack <int> st;
      for(int i = 0; i < n; i++){
         if(s[i] == '('){
            st.push(i);
         }
         else if(s[i] == ')'){
            int j = st.top();
            st.pop();
            par[i] = j;
            par[j] = i;
         }
      }
      string ret = "";
      for(int i = 0, d = 1; i < n; i += d){
         if(s[i] == '(' || s[i] == ')'){
            i = par[i];
            d = -d;
         }
         else{
            ret += s[i];
         }
      }
      out(par);
      return ret;
   }
};
main(){
   Solution ob;
   cout << (ob.reverseParentheses("(hel(lowo)rld)"));
}

इनपुट

"(hel(lowo)rld)"

आउटपुट

13 0 0 0 9 0 0 0 0 4 0 0 0 0
dlrlowoleh

  1. गो और सी ++ के बीच अंतर।

    जाओ गो एक प्रक्रियात्मक प्रोग्रामिंग भाषा है। पैकेज का उपयोग करके कार्यक्रमों को इकट्ठा किया जाता है। यह गतिशील भाषाओं के समान पर्यावरण अपनाने वाले पैटर्न का समर्थन करता है। C++ C++ एक ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग लैंग्वेज है। C++ शांत तेज, विश्वसनीय और सुरक्षित है। यह सबसे व्यापक रूप से उपयोग क

  1. सी/सी++ में एक स्ट्रिंग को उलट दें

    सी भाषा में एक स्ट्रिंग को उलटने के लिए यहां एक उदाहरण दिया गया है, उदाहरण #include<stdio.h> #include<string.h> int main() {    char s[50], t;    int i = 0, j = 0;    printf("\nEnter the string to reverse :");    gets(s);    

  1. C++ में रिवर्स बिट्स

    मान लीजिए कि हमारे पास एक अहस्ताक्षरित संख्या x है, और हम आसानी से इसका द्विआधारी प्रतिनिधित्व (32 बिट अहस्ताक्षरित पूर्णांक) पा सकते हैं। हमारा काम बिट्स को उलटना है। तो अगर बाइनरी प्रतिनिधित्व 00000000000000000000001001110100 की तरह है, तो उलट बिट्स 00101110010000000000000000000000 होंगे। इसलिए हम