কম্পিউটার

C++ এ বন্ধনীর স্কোর


ধরুন আমাদের একটি সুষম বন্ধনী স্ট্রিং S আছে, আমাদের নিম্নলিখিত নিয়মের উপর ভিত্তি করে স্ট্রিংটির স্কোর গণনা করতে হবে -

  • () স্কোর ১
  • AB এর A + B স্কোর রয়েছে, যেখানে A এবং B দুটি সুষম বন্ধনী স্ট্রিং।
  • (A) এর স্কোর 2 * A, যেখানে A হল একটি সুষম বন্ধনী স্ট্রিং।

সুতরাং ইনপুট যদি "(()(()))" এর মত হয়, তাহলে আউটপুট হবে 6।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • উত্তর :=0, একটি স্ট্যাক স্ট্যাক সংজ্ঞায়িত করুন
  • এর জন্য 0 থেকে স্ট্রিং S
      এর মাপ পরিসীমা
    • যদি S[i] বন্ধনী খুলছে, তাহলে স্ট্যাকের মধ্যে -1 ঢোকান
    • অন্যথায়
      • স্ট্যাকের শীর্ষ যদি -1 হয়, তাহলে স্ট্যাক থেকে মুছে ফেলুন এবং স্ট্যাকের মধ্যে 1 ঢোকান
      • অন্যথায়
        • x :=0
        • যদিও স্ট্যাকের শীর্ষ -1
            নয়
          • st দ্বারা x বাড়ান, st থেকে মুছুন
        • x :=x * 2
        • st থেকে মুছুন, এবং x সন্নিবেশ করুন
  • যখন স্ট্যাক খালি থাকে না
    • স্টের শীর্ষে উত্তর বাড়ান এবং শীর্ষ উপাদান মুছুন
  • উত্তর ফেরত দিন।

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int scoreOfParentheses(string S) {
      int ans = 0;
      stack <int> st;
      for(int i = 0; i < S.size(); i+=1){
         if(S[i] == '('){
            st.push(-1);
         }else{
            if(st.top() == -1){
               st.pop();
               st.push(1);
            }else{
               int x = 0;
               while(st.top() != -1){
                  x += st.top();
                  st.pop();
               }
               x *= 2;
               st.pop();
               st.push(x);
            }
         }
      }
      while(!st.empty()){
         ans += st.top();
         st.pop();
      }
      return ans;
   }
};
main(){
   Solution ob;
   cout << (ob.scoreOfParentheses("(()(()))"));
}

ইনপুট

"(()(()))"

আউটপুট

6

  1. C++ এ বৈধ বন্ধনী তৈরি করতে ন্যূনতম সরান

  2. C++ এ বন্ধনীর ভারসাম্যের জন্য খরচ

  3. C++ এ সুষম বন্ধনীর সকল সমন্বয় প্রিন্ট করুন

  4. C++ এ বৈধ বন্ধনী