20. 有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 注意空字符串可被认为是有效字符串。
示例 1:
- 输入: "()"
- 输出: true
示例 2:
- 输入: "()[]{}"
- 输出: true
示例 3:
- 输入: "(]"
- 输出: false
示例 4:
- 输入: "([)]"
- 输出: false
示例 5:
- 输入: "{[]}"
- 输出: true
class Solution {
public:
bool isValid(string s) {
stack<char>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()||s[i]!=st.top()){return false;}//第一种不匹配情况,左右括号不匹配,在判断右括号不匹配时,应该先判断栈是否为空,否则会导致空栈时调用 top 函数产生错误
//else if(st.empty()){return false;}//上一行合了第二种不匹配的情况,右括号多于左括号,这个时候栈中的左括号都没了,s还没遍历完
else st.pop();//匹配就弹出
}
return st.empty();
//等价
// if(st.empty())
// {
// return true;//遍历完了,栈也空了
// }
// else{
// return false;//第三种情况,左括号多于右括号
// }
}
};