ধরুন আমাদের একটি সুষম বন্ধনী স্ট্রিং 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