思路
从题干可以看出,只要给出的括号对应关系正确,那么就可以返回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();}
};