Leetcode1249
给你一个由 ‘(’、’)’ 和小写字母组成的字符串 s。
你需要从字符串中删除最少数目的 ‘(’ 或者 ‘)’ (可以删除任意位置的括号),使得剩下的「括号字符串」有效。
请返回任意一个合法字符串。
思路:栈+set判断左右括号
class Solution {
public:
string minRemoveToMakeValid(string s) {
stack<int> stk;
unordered_set<int> set;
string res;
for(int i = 0; i < s.size(); i++){
if(s[i] == '('){
stk.push(i);
}else if(s[i] == ')'){
if(stk.empty()){
set.insert(i);
}else{
stk.pop();
}
}
}
while(!stk.empty()){
set.insert(stk.top());
stk.pop();
}
for(int i = 0; i < s.size(); i++){
if(!set.count(i)){
res += s[i];
}
}
return res;
}
};