Redundant Bracket
Given a string of balanced expression, find if it contains a redundant parenthesis or not. A set of parentheses is redundant if the same sub-expression is surrounded by unnecessary or multiple brackets. Print "Yes" if redundant else "No".
Input:
The first line of input contains an integer T denoting the number of test cases. The next line T contains an expression. The expression contains all characters and ^, *, /, +, -.
Output:
For each test case, in a new line, print YES or NO if the expression is redundant or not.
Examples:
Input:
T = 1
((a+b))
Output:
YES
(a+b) is surrounded by extra (), which is of no need.
Input:
T = 1
(a+(a+b))
Output:
NO
here there is no extra bracket.
Stack Approach
We will traverse from left to right and perform the following operations.
Example:
Pseudo Code:
string Redundant(string str) { stack<char>st //declare stack //iterate from left to right for(int i=0;i<str.length();i++) { //is character is not ')' then push it into the stack. if(str[i]!=')') { st.push(str[i]) } //if the character is '(' the check for above //mentioned possibilites else if(str[i]==')') { //declare a boolean variable to check for //immediate popped element condition. bool flag=true //variable to store temporary top elements. int x=st.top() st.pop() while(x!='(') { // Check for operators in expression if(str[i]=='+'||str[i]=='-'||str[i]=='/||str[i]=='^'||str[i]=='*') flag=false x=st.top() st.pop() } //if there is immediate bracket without any //operator then its redundant bracket. if(flag==true) {return "YES"} } } //there is no redundant brackets. return "NO" }Time Complexity for above approach is: O(n)
Space Complexity for above approach is: O(n)
C++ Implementation:
Output
2) Implementation
Instead of using the stack to check redundancy, we make two variables to check the number of operators and the number of brackets and check for the condition if some character is present without any operators.
Pseudo Code:
string Redundant(string str) { //declare two variable for bracket and //operator respectively. int x,y x=0 //initialise them with 0 y=0 //iterate through loop for(int i=0;i<str.length();i++) { //if there is immediate breacket return yes if(str[i]=='(' and str[i+2]==')') return "YES" //count number of '(' if(str[i]=='(') x++; //count number of operators. if(str[i]=='+'||str[i]=='-'||str[i]=='*'||str[i]=='/'||str[i]=='^') y++; } //if number of breacket is higher than operator //then its redundant else its not redundant. if(x>y) return "YES" else return "NO" }C++ Implementation:
Output
need an explanation for this answer? contact us directly to get an explanation for this answer