题目描述
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
解题思路
括号匹配的问题,显然我们可以用栈来解决。
遇到左括号就入栈。
当是右括号的时候,观察栈是否为空,当为空的时候——不匹配
当栈顶的左括号与右括号不匹配的时候——不匹配
代码
class Solution { public: bool isValid(string s) { stack<char> st; for(auto ch:s) { if(ch=='('||ch=='['||ch=='{') st.push(ch); else { if(st.empty()) return false; if(ch==')') { if(st.top()!='(') return false; st.pop(); } else if(ch==']') { if(st.top()!='[') return false; st.pop(); } else if(ch=='}') { if(st.top()!='{') return false; st.pop(); } } } return st.empty(); } };