题目中给出的字符串仅包含字符'(',')','{','}','['和']',
对字符串中的每一个字符进行遍历,如果是右括号的话,需要看一下栈顶元素是不是和它匹配的左括号。如果是的话,那这两个括号是一对,让栈顶元素出栈
不满足配对条件的话,就让该元素进栈
如果字符串是一个合法的括号序列,那么整个字符串遍历完毕以后,栈是空的,即所有的右括号都右匹配的左括号。
如果栈内还右元素,就不是合法的括号序列
c++代码

class Solution {
public:
    bool isValid(string s) {
        stack<char> c;
        for(int i = 0 ; i < s.length(); i++)
        {
            if(c.empty())
            {
                c.push(s[i]);
                continue;
            }
            if(s[i]==')'&&c.top()=='('){c.pop();}
            else if(s[i]=='}'&&c.top()=='{'){c.pop();}
            else if(s[i]==']'&&c.top()=='['){c.pop();}
            else{ c.push(s[i]);}
        }
        return c.empty();
    }
};

java代码

import java.util.*;
import java.util.Stack;
public class Solution {
    public boolean isValid (String s) {
        Stack<Character> c = new Stack<Character>();
        for(int i = 0 ; i < s.length(); i++){
            if(c.empty()){
                c.push(s.charAt(i));
                continue;
            }
            if(s.charAt(i)==')'&&c.peek()=='('){c.pop();}
            else if(s.charAt(i)=='}'&&c.peek()=='{'){c.pop();}
            else if(s.charAt(i)==']'&&c.peek()=='['){c.pop();}
            else{ c.push(s.charAt(i));}
        }
        return c.empty();
    }
}

python代码

class Solution:
    def isValid(self , s ):
        stack = []
        for i in s:
            if len(stack)==0:
                stack.append(i)
                continue
            if i==')' and stack[-1]=='(':
                stack.pop()
            elif i=='}' and stack[-1]=='{':
                stack.pop()
            elif i==']' and stack[-1]=='[':
                stack.pop()
            else:
                stack.append(i)
        if len(stack)==0:
            return True
        else:
            return False