1. 程式人生 > 實用技巧 >括號匹配(牛客網高頻面試)

括號匹配(牛客網高頻面試)

括號匹配

題目描述

給出一個僅包含字元'(',')','{','}','['和']',的字串,判斷給出的字串是否是合法的括號序列
括號必須以正確的順序關閉,"()"和"()[]{}"都是合法的括號序列,但"(]"和"([)]"不合法。

程式碼實現:

首先設定一個mp,用於記錄 三種括號對。
左括號:當前符號入棧:
右括號:棧頂元素是否和我當前符號的括號成對,成對則匹配成功:
=> 不成對 或者棧為空 ,則匹配失敗。

import java.util.*;


public class Solution {
    /**
     * 
     * @param s string字串 
     * @return bool布林型
     */
    public boolean isValid (String s) {
        // write code here
        Deque<Character> stack = new ArrayDeque<> ();
        HashMap<Character,Character> mp = new HashMap<> ();
        // 右括號 需要pop因此,需要查詢對應的左括號;
        mp.put('}','{');
        mp.put(')','(');
        mp.put(']','[');
        
        for(int i = 0; i < s.length(); i++){
            // 左括號,入棧;
            if(!mp.containsKey(s.charAt(i))) {
                stack.push(s.charAt(i));
            } else {
                // 成功比匹配條件: 非空棧,並且棧頂左括號  與 當前 右括號匹配; => 此時pop;
                if(!stack.isEmpty() && stack.peek() == mp.get(s.charAt(i)))
                   stack.pop();
                // 其他情況:比方說,棧是空的,或者不匹配 都只能返回false;
                else
                    return false;
            }
        }
        return stack.isEmpty();
    }
}