class Solution
{
public:
bool isValid(string s)
{
//s 中的第一个字符如果是右括号,可以直接 return false了,因为前面没有字符,不存在匹配
//s.size() 为奇数也直接 return false 了,配对必须的偶数个个数
if (s.size() % 2 == 1 || s.size() == 0 || s[0] == '}' || s[0] == ')' || s[0] == ']')
{
return false;
}
stackstack1;
for (int i = 0; i < s.size(); ++i)
{
if (s[i] == '{' || s[i] == '[' || s[i] == '(') //如果是左括号,就不用去配对了,直接 push
{
stack1.push(s[i]);
continue;
}
else if (!stack1.empty())
{
char c = stack1.top();
if (c=='('&&s[i]==')'||c=='{'&&s[i]=='}'||c=='['&&s[i]==']')
{
stack1.pop();
}
else
{
stack1.push(s[i]); //"([)]" ,向这里的 s[2],与 s[1] 不配对就 push
}
}
else
{
stack1.push(s[i]); //这里的空是表示当前栈中配对完了,但字符还有没进来配对(for 循环还没结束)
}
}
if (stack1.empty()) //最后栈为空,就全部配对了,全 pop 掉了,否则就没配对完
{
return true;
}
else
{
return false;
}
}
};