纯括号字符串匹配问题

135 阅读1分钟

给定一个字符串只包含空字符、中括号、大括号、小括号

    1. 左括号必须以相同类型的右括号闭合
    1. 左括号必须以正确的顺序闭合
function isValid(s) {
    const arr=[]
    const map = new Map([['}','{'],[')','('],[']','[']])
    const left = Array.from(map.keys()),right = Array.from(map.values())
    for(let i of s) {
        if (i===' ') continue
        if (right.includes(i)){
            arr.push(i)
        } else {
            const k = map.get(i)
            const last = arr.pop()
            if (last!==k) return false
        }
    }
    return !arr.length
}

思路

  • 给定一个map包含左右对称括号的映射关系,声明一个数组当做栈来使用
  • 遍历字符串、如果是空字符不做处理,如果是左括号,则推入栈
  • 如果是右括号,则判断栈尾是否是对应的左括号,是则对应左括号退栈
  • 遍历结束,判断栈是否为空,为空则说明括号匹配