【算法與數據結構】棧的典型用法之一:括號匹配


棧的典型用法之一:括號匹配

Java
https://leetcode-cn.com/problems/valid-parentheses/solution/zhan-de-dian-xing-yong-fa-zhi-yi-gua-hao-4av4/

解題思路

棧

棧是一種“先進后出”的數據結構。

本例中,棧頂元素反映了在嵌套的層次關系中,最近的需要匹配的元素。

所以我的解決方案使用棧,碰到任意左括號時入棧,否則取出棧頂元素,判斷當前字符是否與棧頂元素匹配,不匹配則停止循環並返回假,否則全部循環完之后判斷棧是否為空(不為空可能存在在最前面只有左括號的情況),是空則返回真,否則返回假。

代碼

class Solution {
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<Character>();
        // 依次遍歷字符串中的字符
        for (int i = 0; i < s.length(); i++) {
            char tag = s.charAt(i);

            if (tag == '(' || tag == '[' || tag == '{') {
                // 判斷是為左括號則入棧
                stack.push(tag);
            } else {
                // 否則看是否匹配

                // 棧為空說明沒有左括號就來了右括號,不符合規則,失敗
                if(stack.isEmpty()){
                    return false;
                }

                // 取出棧頂元素,上面判斷了不為空,所以沒異常
                char top = stack.pop();

                // 判斷棧頂元素是否與目標元素是匹配的,不匹配可以直接返回假了
                if (top == '(' && tag!=')'){
                    return false;
                }else if (top == '[' && tag!=']'){
                    return false;
                }else if (top == '{' && tag!='}'){
                    return false;
                }
            }
        }
        // 最后判斷是否還有多的沒有匹配的,可以直接返回結果
        return stack.isEmpty();
    }
}


免責聲明!

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



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