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)

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