class Solution {
public:
bool isValid(string s) {
/*
栈的特殊性适合这种括号匹配的问题,我们要先分析字符串中的括号有多少种不匹配的情况
1.字符串中左括号多余((([{}]()
2.括号没有多余,但是各种括号不匹配
3.字符串中右括号多余([{}]()))))
所以我们在编写代码时只要包含以上三种情况就可以。
栈的使用
错误情况:
1.已经遍历字符串,栈不为空,有左没有右
2.遍历字符串,栈中没有匹配的括号,返回错
3.遍历字符串过程中,栈中已经空了,说明左括号少了,右括号多余
正确情况:
遍历完字符串,刚好栈空了,说明刚好够
返回true
技巧,匹配左括号的时候,右括号陷入站,比较当前元素与栈顶是否相等就好。
*/
stack<int> st;
for(int i = 0;i<s.size();i++){
if(s[i] == '(') st.push(')');
else if(s[i] == '[') st.push(']');
else if(s[i] == '{') st.push('}');
else if(st.empty() || st.top() != s[i] )
return false;
else st.pop();//st.top()与s[i]相等的情况
}
return st.empty();
}
};
20. 有效的括号
于 2023-07-24 11:10:02 首次发布