天天看點

[ 編碼 ] Java 判斷字元串中括号是否比對

輸入: String str = “()[]{”;

輸出:false

輸入: String str = “()[]{}”;

輸出:true

ps:

使用 java.util 包下的 Stack 類,模拟左括号進棧,遇到右括号就彈棧對比。

面試dd時忘記了Stack類,打算用數組模拟棧,想了半天棧頂指針++ – 的問題,然後容易緊張就放棄思考了。感覺有必要重拾力扣和資料結構了。。

用Stack類就會省事不少。。

public static  boolean  isValid(String str){
        boolean isValid = false;
       // char[] chars = str.toCharArray();
        Stack<Character> stack = new Stack<>();

        for (int i = 0; i < str.length(); i++){

            if (str.charAt(i) == '(' || str.charAt(i) == '[' || str.charAt(i) == '{'){
                stack.push(str.charAt(i));
            }

            if (str.charAt(i) == ')' || str.charAt(i) == ']' || str.charAt(i) == '}'){

                //如果棧空,且字元未周遊完,則表明不比對
                if (stack.isEmpty()){
                    return false;
                }
                if (str.charAt(i) == ')' && stack.peek() == '('  ||
                        str.charAt(i) == ']' && stack.peek() == '['  ||
                        str.charAt(i) == '}' && stack.peek() == '{'
                ){
                    stack.pop();
                }
            }
        }

        //周遊完所有字元,若棧不空,說明左括号過多,不比對
        if (stack.isEmpty()){
            return true;
        }

        return false;

    }
           
[ 編碼 ] Java 判斷字元串中括号是否比對
[ 編碼 ] Java 判斷字元串中括号是否比對