前端-每天一道算法题-006:有效的括号

171 阅读1分钟

题目

给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效。 leetcode地址

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

示例

  • 输入: s='{}'
  • 返回: true
  • 输入: s='{([])}'
  • 返回: true
  • 输入: s='([)]'
  • 返回: false

解题思路

这是一道很典型的用 解决的问题,根据题意,我们可以左括号必须用相同类型的右括号才能闭合,那么我们就可以把所有 左括号 直接放入栈中,遍历右括号时判断是否跟 栈顶元素 (栈的最后一个元素)相匹配,不匹配就返回false,也就是非有效字符串,匹配的话就直接把栈顶元素抛出 pop(),最后若 栈为空 则字符串有效

参考代码

    const str = '({})'
    const str1='([}])'
    const match = (s: string) => {
        const map = { '{': '}', '[': ']', '(': ')' }
        const arr = []
        for (let i of s) {
            if (map[i]) {      // 如果是左括号则直接放入栈中
                arr.push(i)    
            } else {           // 如果是右括号要和栈顶元素相匹配
                if (map[arr[arr.length - 1]] === i) {
                    arr.pop() 
                } else {
                    return false
                }
            }
        }
        return arr.length === 0
    }
    const answer = match(str)
    const answer1 = match(str1)
    console.log('answer', answer);    //  true
    console.log('answer1', answer1);  //  false

结束语

欢乐的做题时光总是如此短暂,有更好的方法可以评论区分享,下次再见!