分析:用stack来存左括号,用map存左右括号,比普通的判断方便一点。每遇到一个右括号,就取栈顶的符号now,如果now与此右括号不匹配,那这个字符串就是不合法的,否则就继续往后遍历。遍历到最后,如果stack里面还有没有被匹配到的左括号,那么这个字符串也是不合法的。
class Solution {
public:
bool isValid(string s) {
stack<char>sta;
map<char,char>ma;
ma['[']=']';
ma['(']=')';
ma['{']='}';
for(int i=0;s[i]!='\0';i++)
{
if(s[i]=='['||s[i]=='('||s[i]=='{')
sta.push(s[i]);
else
{
if(!sta.empty())
{
char now = sta.top();
if(ma[now]==s[i])
{
sta.pop();
continue;
}
else
return false;
}
else
return false;
}
}
if(sta.empty())
return true;
else
return false;
}
};//Runtime: 4 ms,Memory Usage: 8.3 MB