有效括号的错误代码:
class Solution {
public:
bool isValid(string s) {
int len = s.size();
if(len % 2 != 0 ){return false;}
stack <char> compare;
for(int i = 0; i < len; i++){
if(s[i] == '(' || s[i] == '[' || s[i] == '{'){
if(s[i] == '('){
compare.push(')');
}else if(s[i] == '['){
compare.push(']');
}else if(s[i] == '{'){
compare.push('}');
}
}else if(compare.top() == s[i]){
compare.pop();
}else {return false;}
}
return true;
}
};
要考虑compare.top()不能访问的情况,否则会有下图错误。
if(a||b)会依次判断条件a和条件b,如果a满足则不执行b。比如下图代码不报错,前后条件相反则报错。
stack <int> aa;
if (aa.empty() || aa.top() == 1) {
cout <<"aatop" << endl;
}
注意别漏了最终的返回条件:判断栈内是否为空。不能直接遍历后返回true,因为可能最后几个都是左括号,被push进栈了。
字符串也可以使用+=运算符。
删除字符串中的所有相邻重复项,string也是容器,可以直接定义一个string进行栈的操作。(需要用到函数back();push_back();pop_back())
c++字符串转换需要用函数
stoi: string型变量转换为int型变量
stol: string型变量转换为long型变量
stoul:string型变量转换为unsigned long型变量
stoll: string型变量转换为long long型变量(常用)
stoull:string型变量转换为unsigned long long型变量
stof: string型变量转换为float型变量
stod: string型变量转换为double型变量(常用)
stold:string型变量转换为long double型变量