Leetcode 921 Minimum Add to Make Parentheses Valid
我的解法:本题归类于栈标签下,所以用栈来解决,如果")"和栈顶的"("可以相互匹配,将栈顶元素弹出,否则压栈,最后栈中元素个数即为所求。
代码如下(C++):
class Solution {
public:
int minAddToMakeValid(string S) {
if (S.size() < 2)
return S.size();
deque<char> stack;
stack.push_back(S[0]);
for (int i = 1; i < S.size(); i++) {
if (S[i] == '('||stack.size()==0)
stack.push_back(S[i]);
else {
char temp = stack.back();
if (temp == '(')
stack.pop_back();
else
stack.push_back(')');
}
}
return stack.size();
}
};
看评论区有js版本代码如下:
var minAddToMakeValid = function(S) {
while(true) {
let temp = S.replace(/\(\)/g, '');
if(temp === S) {
break;
} else {
S = temp;
}
}
const count = [0, 0];
let result = 0;
let last = '';
for (const char of S) {
if (last === ')' && '(' === char) {
result += Math.abs(count[0] - count[1]);
count[0] = 0;
count[1] = 0;
} else {
last = char;
}
if(char === '(') {
count[0] += 1;
}
if(char === ')') {
count[1] += 1;
}
}
result += Math.abs(count[0] - count[1]);
return result;
};
首先通过正则表达式匹配的方法将字符串中形如"()"的子串去掉,直到字符串中不在包含"()",最后得到的字符串必定形如的形式.最后将所有符号数了一遍?为何不直接统计呢?