20. 有效的括号 --19/11/8

题目:
在这里插入图片描述
在这里插入图片描述

思路一:

  • 栈空
    1. } )]直接淘汰
    2. ( [ {入栈
  • 栈非空
    1. 若] } )匹配则peek出栈,不匹配return
    2. 若[ { ( 入栈
  • 循环结束
    1. 栈空 true
    2. 非空 false
class Solution {
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        char[] arr = s.toCharArray();
        for(int i = 0;i<arr.length;i++){
            if(arr[i]==(']') || arr[i]==(')') || arr[i]==('}')
                    ||arr[i]==('(')||arr[i]==('[')||arr[i]==('{')){
                if(stack.empty()==true){
                    if(arr[i]==(']') || arr[i]==(')') || arr[i]==('}')){
                        return false;
                    }else{
                        stack.push(arr[i]);
                    }
                }else{
                    if(arr[i]==('(')||arr[i]==('[')||arr[i]==('{')){
                        stack.push(arr[i]);
                    }else{
                        try{
                            if(stack.peek()==('(') && arr[i]==(')')){
                                stack.pop();
                            }
                            else if(stack.peek()==('[') && arr[i]==(']')){
                                stack.pop();
                            }
                            else if(stack.peek()==('{') && arr[i]==('}')){
                                stack.pop();
                            }else{
                                return false;
                            }
                        }catch(Exception e){
                            e.printStackTrace();
                        }
                    }
                }
            }
        }
        if(stack.empty()==true){
            return true;
        }else{
            return false;
        }
    }
}

在这里插入图片描述
如果这段代码去面试,,,必挂
写的太丑了

思路二

我们可以不用栈,利用字符串匹配
即只要有括号相邻,就把它消去

s=s.replace("()","").replace("{}","").replace("[]","");

让字符串s一直循环执行这个操作,直到字符串的长度等于零(字符串只包含括号)
但是这种方法的时间复杂度为O(n2/2)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章