问题描述:
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) {
stack<char> ch;
for(int i=0;i<s.length();i++)
{
if(s[i]=='('||s[i]=='{'||s[i]=='[')
{
ch.push(s[i]);
}
if(s[i]==')'||s[i]=='}'||s[i]==']')
{
if(ch.empty())
{
return false;
}
char temp=ch.top();
if((s[i]==')'&&temp=='(')||(s[i]==']'&&temp=='[')||(s[i]=='}'&&temp=='{'))
{
ch.pop();
continue;
}
else
{
return false;
}
}
}
if(ch.empty())
{
return true;
}
else
{
return false;
}
}
};
遇到的错误有:
(1)stack用的太少了,以为pop()有返回值,直接赋给了temp,百度了一下才发现有个top()函数
(2)if((s[i]==')'&&temp=='(')||(s[i]==']'&&temp=='[')||(s[i]=='}'&&temp=='{'))
这一行代码写反了,写成了
if((s[i]=='('&&temp==')')||(s[i]=='['&&temp==']')||(s[i]=='{'&&temp=='}'))这个题比较简单,直接做四则运算的时候就是用到了这种机制,不过比这个复杂很多