问题
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.
代码
class Solution {
public:
bool isValid(string s) {
list<char> stack;
for (int i = 0 ; i < s.size(); i++) {
//cout<<stack.back()<<endl;
char need = '\0';
switch (s[i]) {
case '[':
case '{':
case '(':
stack.push_back(s[i]);
break;
case '}':
need = '{';
if(stack.size() >= 1 && stack.back() == need)
{
stack.pop_back();
}
else
{
//cout<<"haha"<<endl;
return false;
}
break;
case ']':
need = '[';
if(stack.size() >= 1 && stack.back() == need)
{
stack.pop_back();
}
else
return false;
break;
case ')':
need = '(';
if(stack.size() >= 1 && stack.back() == need)
{
stack.pop_back();
}
else
return false;
break;
default:
break;
}
}
if (stack.size() != 0) {
//cout<<"haha2"<<endl;
return false;
}
else
return true;
}
};
分析
原理是使用栈,当然这里我使用List,原因是因为list出入方便一些。
题目表明只会有 [ ] ( ) { } 这几种输入,所以不用担心其他字符。
遇到 [ { ( 二话不说,入栈。
遇到 } ) ] 则尝试出战,需要判定最后一个是否 为对应的 { ( [ 。如果不是,马上返回错误。如果是,则出栈。
最后检查栈是否是空,是,true, 否, false.
总结
栈的考察。无难度。