代码随想录第十天 2023.7.21
题目链接:20. 有效的括号 - 力扣(LeetCode)https://leetcode.cn/problems/valid-parentheses/
代码如下:
class Solution {
public:
bool isValid(string s) {
stack<char> st;
if(s.size()%2!=0){
return false;
}
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();
}
}
return st.empty();
}
};
解题前先分析题意:
有三种不匹配的情况:
第一种情况,字符串里左方向的括号多余了 ,所以不匹配
栈的情况:已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配
第二种情况,括号没有多余,但是 括号的类型没有匹配上。
栈的情况:遍历字符串匹配的过程中,发现栈里没有要匹配的字符,即 st.top() != s[i]
第三种情况,字符串里右方向的括号多余了,所以不匹配。
栈的情况:遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了