思路
从题干可以看出,只要给出的括号对应关系正确,那么就可以返回true,否则返回false。这个题可以使用栈来解决
解题过程
首先从第一个字符开始遍历,如果是括号的左边(‘(‘,’[‘,’}‘),则直接将该字符压栈
如果是括号的右边: 首先判断栈是否为空,如果为空,则直接返回false
如果栈不为空,则可以与栈的顶部数据进行比较,若左右括号对应(’()‘,’[]‘,’{}‘),说明这个括号对应关系正确,然后直接使用stack.pop()出栈 遍历完s中的所有数据之后,若栈为空,说明所有括号的对应关系都正确,直接返回true,否则返回false
以示例2作为例子:
代码
class Solution {
public:
bool isValid(string s)
{
stack <char> stack;
for(int i=0;i<s.length();i++)
{
char c = s[i];
if(c == '(' || c == '[' || c == '{')
stack.push(c);
else if(c == ')')
{
if(stack.empty() || stack.top()!='(')
{
return false;
}
else
{
stack.pop();
}
}
else if(c == ']')
{
if(stack.empty() || stack.top()!='[')
{
return false;
}
else
{
stack.pop();
}
}
else if(c == '}')
{
if(stack.empty() || stack.top()!='{')
{
return false;
}
else
{
stack.pop();
}
}
}
return stack.empty();
}
};