20. Valid Parentheses检验括号字符串的有效性

[抄题]:

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

The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]" and "([)]" are not.

 [暴力解法]:

时间分析:

空间分析:

[奇葩输出条件]:

[奇葩corner case]:

没有左括号、左括号太多、不匹配

[思维问题]:

[一句话思路]:

不存在右括号太多的情况,因为右括号都是自己入栈的

[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

[画图]:

[一刷]:

[二刷]:

[三刷]:

[四刷]:

[五刷]:

  [五分钟肉眼debug的结果]:

[总结]:

不存在右括号太多的情况,因为右括号都是自己入栈的

[复杂度]:Time complexity: O(n) Space complexity: O(n)

[英文数据结构或算法,为什么不用别的数据结构或算法]:

stack:最晚来的左括号反而最先判断,有点“不公平”

[关键模板化代码]:

[其他解法]:

[Follow Up]:

[LC给出的题目变变变]:

22. Generate Parentheses 回溯法,又忘了

 [代码风格] :

class Solution {
    public boolean isValid(String s) {
        //corner case
        if (s == null) {
            return true;
        }
        Stack<Character> stack = new Stack<Character>();
        //push into stack
        for (char c : s.toCharArray()) {
            //left cases 
            if (c == '(') {
                stack.push(')');
            }else if (c == '[') {
                stack.push(']');
            }else if (c == '{') {
                stack.push('}');
            }else if (stack.isEmpty() || stack.pop() != c) {
                //right case
                return false;
            }
        }
        return stack.isEmpty();
    }
}
View Code
原文地址:https://www.cnblogs.com/immiao0319/p/8597732.html