【棧】括號匹配

Jacob-Chen發表於2024-08-23

題目描述

給定一個字串,裡邊可能包含“()”、“[]”、“{}”三種括號,請編寫程式檢查該字串中的括號是否成對出現,且巢狀關係正確。
若括號成對出現且巢狀關係正確,或該字串中無括號字元,輸出:true;
若未正確使用括號字元,輸出:false。
實現時,無需考慮非法輸入。

用例

輸入

(1+2)/(0.5+1)

輸出

true

解題思路

  1. 建立一個 hashMap 來封裝左右括號的對映關係:")" => "(""]" => "\[""}" => "{"
  2. 遍歷字串,遇到"(","[","{" 字串則入棧;遇到 ")","]","}" 字串,則判斷棧是否為空,如果為空,或者遇對映關係無法匹配時,則輸出 false。

程式碼實現

public class BracketChecker {
    public static boolean isBalanced(String line) {
        Map<Character, Character> map = new HashMap<>();
        map.put(')', '(');
        map.put(']', '[');
        map.put('}', '{');
        Stack<Character> stack = new Stack<>();
        for (char c : line.toCharArray()) {
            if (c == '(' || c == '[' || c == '{') {
                stack.push(c);
            } else if (c == ')' || c == ']' || c == '}') {
                if (stack.isEmpty() || !map.get(c).equals(stack.peek())) {
                    return false;
                }
                stack.pop();
            }
        }
        return stack.isEmpty();
    }

    public static void main(String[] args) {
        try (Scanner sc = new Scanner(System.in)) {
            String line = sc.nextLine();
            System.out.println(isBalanced(line));
        }
    }
}

相關文章