2024/07/18

LeetCode 20. Valid Parentheses

給定一個只包含字符 '(', ')', '{', '}', '[' 和 ']' 的字符串 s,判斷輸入的字符串是否有效。
如果輸入字符串滿足以下條件則為有效:
  1. 開括號必須由相同類型的閉括號關閉。
  2. 開括號必須以正確的順序關閉。
  3. 每個閉括號都有一個相應類型的開括號。
/**
 * @param {string} s - 輸入的字符串,包含括號字符
 * @return {boolean} - 如果括號有效則返回 true,否則返回 false
 */
var isValid = function(s) {
    // 如果字符串的長度不在 1 到 10^4 之間,返回 false
    if (s.length < 1 || s.length > Math.pow(10, 4)) {
        return false;
    }

    // 建立括號匹配的映射
    const map = new Map([
        [")", "("],
        ["]", "["],
        ["}", "{"]
    ]);

    // 用於存儲開括號的堆疊
    const stackArray = [];

    // 遍歷字符串中的每個字符
    for (let i = 0; i < s.length; i++) {
        const char = s[i];

        // 如果是閉括號,檢查堆疊頂部是否匹配
        if (map.has(char)) {
            // 如果堆疊為空或堆疊頂部的括號不匹配,返回 false
            if (stackArray.length === 0 || stackArray.pop() !== map.get(char)) {
                return false;
            }
        } else {
            // 如果是開括號,壓入堆疊
            stackArray.push(char);
        }
    }

    // 如果堆疊為空,則所有括號都匹配
    return stackArray.length === 0;
};