有效的括号首先是左右括号的数量相等,再就是左括号一定先出现(在左边),这个可以使用一个变量来计数,出现做括号加一,出现右括号减一,当变量等于-1时,一定是多出了一个有括号,删除它,如果所有括号处理完了,发现这个变量不等于0,说明多出了左括号,再重新处理一遍做括号即可。
下面是C++语言实现的代码:
class Solution {
public:
string minRemoveToMakeValid(string s) {
string ret = "";
int pre = 0, cnt = 0;
for (int i = 0; i < s.length(); i++) {
switch (s[i]) {
case '(':
cnt ++;
break;
case ')':
cnt --;
break;
}
if (cnt == -1) {
ret += s.substr(pre, i - pre);
cnt = 0;
pre = i + 1;
}
}
ret += s.substr(pre, s.size() - pre);
if (cnt == 0) {
return ret;
}
s = ret;
ret = "";
pre = s.length() - 1;
cnt = 0;
for (int i = pre; i >= 0; i--) {
switch (s[i]) {
case '(':
cnt --;
break;
case ')':
cnt ++;
break;
}
if (cnt == -1) {
ret = s.substr(i + 1, pre - i) + ret;
cnt = 0;
pre = i - 1;
}
}
ret = s.substr(0, pre + 1) + ret;
return ret;
}
};