题目描述 有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例
输入: "()[]{}"
输出: true
解题思路
- 采用栈,遇到左括号压栈
- 遇到右括号判断当前栈是否为空,为空返回false;不为空取栈顶元素,若与当前右括号不匹配返回false,否则继续循环;
- 遍历完所有字符之和判断栈是否为空,为空返回ture,否则返回false ;
代码
class Solution {
public:
bool isValid(string s) {
stack<char> tack;
if(s.size()==0) return true;
for(auto c:s){
switch(c){
case ')':
if(tack.empty())return false;
else if(tack.top()=='(')tack.pop();
else tack.push(c);
break;
case '}':
if(tack.empty())return false;
else if(tack.top()=='{')tack.pop();
else tack.push(c);
break;
case ']':
if(tack.empty())return false;
else if(tack.top()=='[')tack.pop();
else tack.push(c);
break;
default:
tack.push(c);
break;
}
}
return tack.empty() ? true : false;
}
};