[打卡6:leetcode20-有效的括号] |刷题打卡

223 阅读2分钟

掘金团队号上线,助你 Offer 临门! 点击 查看详情

前言

第一次参加掘金打卡活动,别的不说 主要是奔着奖励来的。4.12开始为了达到14题小目标 冲冲冲!!!这是第六题。(题外话:这些文章其实都是晚上的时候写好 然后存在草稿箱 等第二天再点发布 比如今天打卡5和6 其实我草稿箱已经在写7和8了)

image.png

题目描述

题目链接:有效的括号

题目描述我用截图leetcode的为主,所以题目如下图

image.png

思路分析

题目解析:首先括号是成对的,有点像连连看的感觉 要可以成功消除就是有效的 碰到不能成功消除则是无效的,而且要先有左括号,然后一定要满足对应右括号是接下来一位或者最后一位才可消除

实现如下: image.png 运行错误了 因为当字符为"(([]){})"不能成功消除,好的我的算法在碰到第二个'('的时候会找不到')'

看来我还是没考虑清楚题意,需要重新思考一下,采用空数组去存着等待消除,首先依次遍历字符串(for...of) 碰到左括号,就把这个类型的右括号记录下来(依次存进数组),当碰到右括号要和数组的末尾相等,不等则是不可消除的,相等即消除成功,遍历结束后数组里没有任何类型的右括号,则为消除成功。

image.png

AC 代码

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var isValid = function(s) {
  if(!s||s.length%2!=0){
      return false
  }
  let obj  = {
        '(': ')',
        '[': ']',
        '{': '}'
    }
    let arr = []
     for(let i of s){
        if(obj[i]){
            arr.push(i)
            }else {
                if(i != obj[arr.pop()]){
                    return false;
                }
            }
        }
        return !arr.length
};

总结

坚持就是胜利。第六题算法完成,坚持就是胜利!!!

       ↓↓↓

算法系列链接

       ↑↑↑

这里可以点!这里可以点!这里可以点!