20.Valid Parentheses

class Solution:
    def isValid(self, s: str) -> bool:
        dic = {"(":")",")":"(","[":"]","]":"[","{":"}","}":"{"}
        if len(s) == 0:
            return True
        else:
            stack = ""
            for i,w in enumerate(s):
                if len(stack) >0 and stack[-1] == dic[w]:
                    stack = stack[:-1]
                else:
                    stack += w
            if len(stack) == 0:
                return True
            else:
                return False

Java 版:

  • 利用栈的先进后出思想来做;
  • 遇到前括号,则入栈;
  • 遇到后括号,则从栈顶拿元素,判断是否是一对;
  • 注意判断栈是否是空栈。

class Solution {
    public boolean isValid(String s) {
        if(s.length() == 0) return true;
        Stack<Character> stack = new Stack<>();
        for(int i = 0; i < s.length(); i++){
            char c = s.charAt(i);
            if(c == '(' || c == '[' || c == '{') stack.push(c); //入栈
            else{
                if(stack.size() == 0) return false;//判栈空,栈非空才能有元素出栈
                char top = stack.pop();//出栈
                if(c == ')' && top == '(') continue;//判断能否配对
                else if(c == ']' && top == '[') continue;
                else if(c == '}' && top == '{') continue;
                else return false; //都不能配对成功,则返回 false
            }
        }
        if(stack.size() > 0) return false;
        return true;
    }
}
原文地址:https://www.cnblogs.com/luo-c/p/12857142.html