 
  Data Structure Data Structure
 Networking Networking
 RDBMS RDBMS
 Operating System Operating System
 Java Java
 MS Excel MS Excel
 iOS iOS
 HTML HTML
 CSS CSS
 Android Android
 Python Python
 C Programming C Programming
 C++ C++
 C# C#
 MongoDB MongoDB
 MySQL MySQL
 Javascript Javascript
 PHP PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Score of Parentheses in C++
Suppose we have a balanced parentheses string S, we have to compute the score of the string based on the following rule −
- The () has score 1
- AB has score A + B, where A and B are two balanced parentheses strings.
- (A) has score 2 * A, where A is a balanced parentheses string.
So if the input is like “(()(()))”, then the output will be 6.
To solve this, we will follow these steps −
- ans := 0, define a stack st
- for i in range 0 to size of string S- if S[i] is opening parentheses, then insert -1 into stack
- otherwise- if top of stack is -1, then delete from stack and insert 1 into stack
- otherwise- x := 0
- while top of stack is not -1- increase x by st, delete from st
 
- x := x * 2
- delete from st, and insert x
 
 
 
- while stack is not empty- increase ans by top of st, and delete top element
 
- return ans.
Let us see the following implementation to get better understanding −
Example
#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("(()(()))")); }  Input
"(()(()))"
Output
6
Advertisements
 