之前做过一次,后面再做一次:出错。发现了之前存在的错误 代码如下
class Solution {
public:
bool isValid(string s) {
if(s.size() % 2 == 1) {
return false;
}
unordered_map <char, char> myMap;
myMap[')'] = '(';
myMap['}'] = '{';
myMap[']'] = '[';
stack<char> stk;
for(char c : s) {
auto it = myMap.find(c);
// 未找到,即左括号
// if(it == myMap.end()) {
// stk.push(c);
// }
// // 右括号
// else {
// if(!stk.empty()) {
// char tmp = stk.top();
// if(it->second != tmp) {
// return false;
// }
// stk.pop();
// }
// else {
// return false;
// }
// }
// 右括号
if(it != myMap.end()) {
// 注意stk.empty()一定要放在前面,否则当栈为空,调用stk.top()函数报错
if(stk.empty() || it->second != stk.top()) {
return false;
}
else {
stk.pop();
}
}
else {
stk.push(c);
}
}
return stk.empty();
}
};
需要注意的是if(stk.empty() || it->second != stk.top()) { 判断栈是否为空需要放在前面,括号内部,前面的语句先执行,||运算符,前面的已经为真,不需要再判断后面的