模板题目:Stack( 20 Valid Parentheses)

LC20 Given a string s containing just the characters ‘(’, ‘)’, ‘{’, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.

An input string is valid if:

Open brackets must be closed by the same type of brackets.
Open brackets must be closed in the correct order.
虽然我现在已经养成了看到括号的题目就能想到staack的习惯 但是具体实施的时候还是因为边界条件没想清楚。
不过这道题目可以说是很经典了:遇到左括号就push进去对应的有括号 遇到右括号就检查跟peek的是不是匹配,如果匹配就Pop()
最后检查stack是不是空。

class Solution {
    public boolean isValid(String s) {
        if (s == null || s.length() == 0) return false;
        if (s.length() % 2 == 1) return false;
        
        Stack<Character> stack = new Stack<>();
        for (char c: s.toCharArray()) {
            System.out.println(c);
            if (c == '(') {
                stack.push(')');
            } else if (c == '[') {
                stack.push(']');
            } else if (c == '{') {
                stack.push('}');
            } else if (!stack.isEmpty() && ((c == ')' && stack.peek() == ')') || (c == ']' && stack.peek() == ']') || (c == '}' && stack.peek() == '}') )){
                stack.pop();
            } else {
                return false;
            }
        }
        return stack.isEmpty();
    }
}

但是真的是所有的括号题目都用stack吗?所有的stack都是用来解括号相关的题目的吗?
并不是这样的,我记得有一道求最长的valid的括号序列 这道题目跟dp有关。而且stack还可以被用来进行DFS,而且mono stack的方法还可以被用来解决一些数组的问题。

posted @ 2020-12-18 00:47  EvanMeetTheWorld  阅读(18)  评论(0)    收藏  举报