- Data Structure
- Networking
- RDBMS
- Operating System
- Java
- MS Excel
- iOS
- HTML
- CSS
- Android
- Python
- C Programming
- C++
- C#
- MongoDB
- MySQL
- Javascript
- PHP
- Physics
- Chemistry
- Biology
- Mathematics
- English
- Economics
- Psychology
- Social Studies
- Fashion Studies
- Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Minimum Remove to Make Valid Parentheses in C++
Suppose we have a string s of '(' , ')' and lowercase English characters. We have to remove the minimum number of parentheses ( '(' or ')', in any positions ) so that the resulting parenthese string is valid and return any valid string. A parentheses string is valid when all of these criteria are fulfilled −
It is the empty string, contains lowercase characters only, or
It can be written as the form of AB (A concatenated with B), where A and B are valid strings, or
It can be written as the form of (A), where A is a valid string.
So if the input is like “a)b(c)d”, then the output will be “ab(c)d”
To solve this, we will follow these steps −
Define a stack st
for i in range 0 to size of s
if s[i] = ‘(’, then insert i into st
otherwise when s[i] is ‘)’, then
if stack is not empty, then pop from stack, otherwise s[i] = ‘*’
while st is not empty,
s[top element of stack] = ‘*’
pop from stack
ans := empty string
for i in range 0 to size of s – 1
if s[i] is not ‘*’, then ans := ans + s[i]
return ans
Let us see the following implementation to get better understanding −
Example
#include <bits/stdc++.h> using namespace std; class Solution { public: string minRemoveToMakeValid(string s) { stack <int> st; for(int i = 0; i < s.size(); i++){ if(s[i] == '(')st.push(i); else if(s[i] == ')'){ if(!st.empty())st.pop(); else s[i] = '*'; } } while(!st.empty()){ s[st.top()] = '*'; st.pop(); } string ans = ""; for(int i = 0; i < s.size(); i++){ if(s[i] != '*')ans += s[i]; } return ans; } }; main(){ Solution ob; cout << (ob.minRemoveToMakeValid("a)b(c)d")); }
Input
"a)b(c)d"
Output
ab(c)d