给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 注意空字符串可被认为是有效字符串。
示例 1:
- 输入: "()"
- 输出: true
示例 2:
- 输入: "()[]{}"
- 输出: true
示例 3:
- 输入: "(]"
- 输出: false
思路:栈非常适合用来做对称匹配类的题目。
每遇到一个( [ { 左括号,向栈内压入对应的右括号;当相应右括号为栈顶元素时,pop出去,不然的话直接fasle(这里得先提前判断一下栈是否为空,否则会报错);最后如果遍历完成,栈不为空则false,空则true(返回empty即可)
class Solution {
public:
bool isValid(string s) {
stack<char> store;
//去枝
if(s.size()%2!=0)
return false;
for(int i=0;i<s.size();i++){
if(s[i]=='(')
store.push(')');
else if(s[i]=='[')
store.push(']');
else if(s[i]=='{')
store.push('}');
else if(store.empty()||store.top()!=s[i])
return false;
else
store.pop();
}
return store.empty();
}
};