括號匹配-算法詳細題解LeetCode


題目:有效的括號

給定一個只包括 '(',')','{','}','[',']' 的字符串,判斷字符串是否有效。
有效字符串需滿足:
左括號必須用相同類型的右括號閉合。
左括號必須以正確的順序閉合。

注意空字符串可被認為是有效字符串。

示例 1:

輸入: "()"
輸出: true

示例 2:

輸入: "()[]{}"
輸出: true

示例 3:

輸入: "(]"
輸出: false
/**
 * @author cosefy
 * @date 2020/6/8
 */

public class ValidParenthesis {
    public static void main(String[] args) {
        String s = "";
        System.out.println(s);
        boolean b = isValid_Test1(s);
        boolean b = isValid_Test2(s);
        System.out.println("結果是: " + b);
    }

    //解法一:采用棧的輔助
    /*
    思路:循環遍歷字符串,遇到左括號就壓棧,否則就出棧,出棧時判斷棧是否為空,遍歷結束后,記得判斷棧空。
    分析:一趟遍歷,時間復雜度為O(n)
    易錯點:注意棧空的判斷
    思考:
        -執行用時很少,但內存消耗有點多,考慮是否有辦法節約內存。
        -可以判斷字符串的長度是否為0或者為奇數,直接返回結果
     */
    public static boolean isValid_Test1(String s) {
        if (s.length() == 0)
            return true;
        if (s.length() % 2 != 0)
            return false;
        Stack<Character> stack = new Stack<>();
        for (char c : s.toCharArray()) {
            if (c == '(' || c == '{' || c == '[') {
                stack.push(c);
            } else {
                if (stack.isEmpty())
                    return false;
                char cc = stack.pop();
                if ((cc == '(' && c != ')') || (cc == '{' && c != '}') || (cc == '[' && c != ']'))
                    //上述判斷語句也可用HashMap存儲三對括號來查詢實現。
                    return false;
            }

        }
        return stack.isEmpty();
    }

    //解法二:數組輔助實現
    /*
    思路:開辟一個數組存放字符,利用一個變量來訪問數組,若遍歷到左括號,變量自加1,否則變量自減1,
    分析:此方法相對來說用時更少。
     */

    public static boolean isValid_Test2(String s) {
        if (s.length() == 0)
            return true;
        if (s.length() % 2 != 0)
            return false;
        char[] chars = new char[s.length()];
        int index = -1;
        for (char c : s.toCharArray()) {
            if (c == '(' || c == '{' || c == '[') {
                index++;
                chars[index]=c;
            }else {
                if(index==-1)
                    return false;
                if(c==')'&&chars[index]=='('||
                        c=='}'&&chars[index]=='{'||
                        c==']'&&chars[index]=='[')
                    index--;
            }
        }
        return index==-1;
    }
}



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM