题目:
算法思路:
本题主要考察栈的使用,当然可以使用stack实现,也可以用vector来实现栈的操作。
- 设置一个变量len保存string s的长度,res记录结果(这里可以解释为当先出现')'时,需要一个变量记录需要添加的‘(’的数量。)
- 遍历s,当遇到‘(’时,将字符入栈(push),当字符为')'时,res自加,其他情况进行出栈(pop)操作。
- 最后函数的返回为res+栈的大小。
大家可以拿这个实例进行带入,就可以理解res变量的设置原因。以及返回结果为什么这样设置。
代码实现:
class Solution {
public:
int minAddToMakeValid(string s) {
int len=s.length();
stack<char> left;
int res=0;
for(int i=0;i<len;i++){
if(s[i]=='('){
left.push(s[i]);
}
else if(left.empty()){
res++;
}else{
left.pop();
}
}
return res+left.size();
}
};