20. Valid Parentheses
Given a string containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.
The brackets must close in the correct order, “()” and “()[]{}” are all valid but “(]” and “([)]” are not.
题意
给定一个字符串仅仅包含’(‘, ‘)’, ‘{‘, ‘}’, ‘[‘,’]’六个字符,来判断输入是否有效
判定的规则就是,左括号必须匹配右括号
注意
如 ”()” , “()[]{}” 是合法的
如 “(]”,”([)]” 是非法的
注意特殊情况,当只有右括号作为输入,此时栈为空
思路
遍历字符串,当遇到左括号,压入栈中,遇到右括号弹出一个栈顶元素,将右括号转换为对应的左括号,和栈顶元素作为判断。相等继续,不相等返回false。
当输入‘(’‘[’‘{’‘}’,最终栈里元素还有剩下,循环已经完成,此时应该返回false。
代码
class Solution {
public:
bool isValid(string s) {
stack<char> sta;
for(int i=0;i<s.size();i++)
{
if(s[i]=='('||s[i]=='['||s[i]=='{')
{
sta.push(s[i]);
}
else
{
char temp = s[i];
switch(temp)
{
case ')':
temp = '(';
break;
case ']':
temp = '[';
break;
case '}':
temp = '{';
break;
default:
return false;
}
//对栈取栈顶元素弹出操作需要检查其有效性
if (sta.size()==0)
{
return false;
}
char top = sta.top();
sta.pop();
if(top != temp)
{
return false;
}
}
}
//当最后的栈不为空也返回false
if(sta.size() != 0)
{
return false;
}
return true;
}
};