题目
思路
从先向后遍历字符串,边遍历边匹配,遇见左括号就进栈,遇见有括号就和栈顶元素匹配,如果匹配成功则栈顶元素就出栈,如果匹配不成功就继续遍历。如果最后栈为空则说明匹配成功,否则就说明匹配不成功。
代码
class Solution {
public:
bool isValid(string s) {
if(s.size() % 2 != 0)//如果字符串不是偶数就说明一定不匹配
{
return false;
}
stack<int> t;//这里栈定义为int型所以存储的时候可以直接存储s[i],如果为char类型就需要存储'(','{'
char c;
for(int i = 0; i < s.size(); i ++)
{
if(s[i] == '(' || s[i] == '[' || s[i] == '{')
{
t.push(s[i]);
}
else
{
if(t.empty())
{
return false;
}
else if(s[i] == ')')
{
c = '(';
}
else if(s[i] == '}')
{
c = '{';
}
else
{
c = '[';
}
if(t.top() != c)
return false;
t.pop();
}
}
if(t.empty())
return true;
else
return false;
}
};