整理好不匹配的情况有哪些种类,写代码就顺畅了。使用栈进行实现还是比较简单的
<aside> 💡
不匹配的情况:
// 将需要匹配的左括号存入栈
// 遇到右括号时将栈顶弹出并与右括号匹配
// 如果匹配失败或是最后栈中还有元素剩下说明字符串不是有效的
bool isValid(string s) {
// 可以进行剪枝:如果字符串长度是奇数,则一定有不匹配的括号
if (s.size() % 2 == 1)
return false;
stack<int> stk;
for (char c : s) {
switch (c) {
case ')': {
if (stk.empty() || stk.top() != '(') {
return false;
}
stk.pop();
break;
}
case '}': {
if (stk.empty() || stk.top() != '{') {
return false;
}
stk.pop();
break;
}
case ']': {
if (stk.empty() || stk.top() != '[') {
return false;
}
stk.pop();
break;
}
default: {
stk.push(c);
}
}
}
return stk.empty();
}