class Solution {
public:
/* 失配的情况有三种:
1. 左边括号多了
2. 右边括号多了
3. 左右不匹配
*/
bool isValid(string s) {
stack<int> st; // char 也行
int len = s.size(); // length()和size()一样
for (int i = 0; i < len; i++) {
if (s[i] == '(')
st.push(')');
else if (s[i] == '[')
st.push(']');
else if (s[i] == '{')
st.push('}');
// !!! 判断空要在前,不然可能越界 !!!
// 第二种情况,第三种情况
else if (st.empty() || s[i] != st.top())
return false;
else st.pop();
}
// 第一种情况
return st.empty();
}
};

总结
失配情况:
- 右边括号少了
- 右边括号多了
- 左右不匹配
出现的错误:
判断栈空要在前,不然会导致越界!
括号匹配算法解析与错误处理
该博客探讨了一个C++实现的括号匹配算法,用于检查字符串中括号的有效性。文章详细分析了三种失配情况:左边括号多余、右边括号缺少以及左右括号不匹配,并强调了在判断栈空时应先检查,以防止数组越界错误。通过遍历输入字符串并使用栈来跟踪预期的闭合括号,算法能够有效地检测括号的正确性。
4万+

被折叠的 条评论
为什么被折叠?



