算法 有效空格

算法 有效空格

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

有效字符串需满足:

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

示例
在这里插入图片描述

分析题目:

有效空格,需要满足:最先出现的左括号,右括号越晚出现

首先第一个想法就Map,左括号对应右括号

    const map = new Map([
        [')','('],
        ['}','{'],
        [']','[']
    ])

遍历字符串,如果在map中没有没有对应的数据,那么就是左括号,反之相反
逻辑梳理:

  • 如果字符串的长度是一个奇数,那么这个字符串中的括号一定是没有闭合的,直接返回false
  • 创建数组,栈的数据结构,只存放左括号
  • 遍历字符串
    • map中存在对应的值
      • 栈中数据长度为0 或者 map中对应的值与栈中最后一个的值不相同,直接返回false
      • 如果栈中数据长度不为0且map中对应的值与栈中最后一个的值相等,那么就pop,弹出最后的数据
    • map中不存在对应的值,添加到栈中
function isValid(s: string): boolean {
    if(s.length % 2 === 1) return false
    const map = new Map([
        [')','('],
        ['}','{'],
        [']','[']
    ])
    let arr = []
    for(let ch of s){
        // true则是由反向括号,),},]
        if(map.has(ch)){
            if(!arr.length || arr[arr.length-1] !== map.get(ch)){
                return false
            }
            arr.pop()
            continue
        }
        arr.push(ch)
    }
    return !arr.length
};
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值