LeetCode20. 有效的括号isValid(栈)

1、题目描述

2、代码详解

class Solution(object):
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """
        stack = []
        pattern_map = {): (, }: {, ]: [}
        for c in s:
            if c not in pattern_map:  # 如果左括号,压栈
                stack.append(c)
            elif stack == [] or pattern_map[c] != stack.pop():  # 如果右括号,先看栈是否为空,再看是否匹配
                return False
        return not stack  # 判断最终栈是否为空

s1 = ([)]
s2 = {[]}
s = Solution()
print(s.isValid(s1))
print(s.isValid(s2))
import java.util.Stack;

public class IsValid_20 {
    public static void main(String[] args){
        String s = "{[]}";
        System.out.println(isValid(s));
    }

    public static boolean isValid(String s){
        Stack<Character> stack = new Stack<>();
        for (char c : s.toCharArray()){
            if(c == ( || c == { || c == [) {
                stack.push(c);
            }
            else {
                if (stack.isEmpty())
                    return false;
                char cStack = stack.pop();
                boolean b1 = (c == ) && cStack != ();
                boolean b2 = (c == } && cStack != {);
                boolean b3 = (c == ] && cStack != [);
                if (b1 || b2 || b3) // 如果不匹配
                    return false;
            }
        }
        return stack.isEmpty();
    }
}
经验分享 程序员 微信小程序 职场和发展