মান করুন আমাদের একটি बैलেন্সড প্যারেনথিসিস স্ট্রিং S দেওয়া আছে, আমাদের নিচের নিয়ম অনুযায়ী স্ট্রিংর স্কোর গণনা করতে হবে −
()-এর স্কোর 1AB-এর স্কোরA + B, যেখানেAএবংBদুটি बैলেন্সড প্যারেনথিসিস স্ট্রিং(A)-এর স্কোর2 * A, যেখানেAএকটি बैলেন্সড প্যারেনথিসিস স্ট্রিং
যদি ইনপুট হয় "(()(()))", তবে আউটপুট হবে 6।
এটি সমাধান করার জন্য নিচের ধাপগুলি অনুসরণ করুন −
ans := 0, একটি স্ট্যাকstসংজ্ঞায়িত করুনi = 0থেকে স্ট্রিংS-র আকার পর্যন্ত- যদি
S[i]ওপেনিং প্যারেনথিসিস হয়, তবে স্টকে -1 পুশ করুন - অন্যথায়
- যদি স্টকের টপ -1 হয়, তবে পপ করে 1 পুশ করুন
- অন্যথায়
x := 0- যতক্ষণ স্টকের টপ -1 না হয়
xকে স্টকের টপ দিয়ে বাড়ান, স্টকে পপ করুন
x := x * 2- স্টকে পপ করুন, এবং
xপুশ করুন
- যদি
- যতক্ষণ স্ট্যাক খালি না হয়
ansকে স্টকের টপ দিয়ে বাড়ান, এবং টপ এলিমেন্ট পপ করুন
ansফেরত দিন
উদাহরণ কোড
#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