分析
经典的括号匹配问题,使用栈实现。
括号不匹配可能面临三种情况:
- 右括号多于左括号 即 ()),这意味着循环将在str.length次前提前终止(匹配到第二个 ) 时栈已经空了)
- 左括号多于右括号 即 ((),这意味着循环结束后栈中仍有元素。
- 左右括号数相等但括号不匹配,如((]]
代码
class Solution {
public:
bool mathSuccessful(char c1, char c2) { // stack, character
if (c2 == ')') return c1 == '(';
if (c2 == '}') return c1 == '{';
return c1 == '[';
}
bool isValid(string s) {
stack<char> st;
int i = 0, length = s.length();
for (;i < length;i++) {
char c2 = s[i];
if (c2 == '{' || c2 == '[' || c2 == '(')
st.push(c2);
else {
if (st.empty()) break;
char c1 = st.top();
st.pop();
if (!mathSuccessful(c1, c2)) break;
}
}
if (i < length || !st.empty()) return false;
return true;
}
};
本文深入探讨了经典的括号匹配问题,并提供了一种基于栈的数据结构解决方案。文章详细解释了如何通过栈来判断括号是否正确配对,包括三种可能的错误情况:右括号过多、左括号过多以及括号类型不匹配。
1195

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



