LeetCode刷题挑战-javascript:20.有效的括号

247 阅读2分钟

「这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战

题目

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

有效字符串需满足:

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

输入:s = "()"

输出:true

示例 2:

输入:s = "()[]{}"

输出:true

示例 3:

输入:s = "(]"

输出:false

示例 4:

输入:s = "([)]"

输出:false

示例 5:

输入:s = "{[]}"

输出:true  

提示:

  • 1 <= s.length <= 104
  • s 仅由括号 '()[]{}' 组成

解题思路

首先,字符串s只包含指定的括号,所以不用过多的做别的判断。

其次,通过阅读有效字符串需要满足的条件,我们可以很轻松的想到一种数组存储的方式,就是

栈的特点:先进后出

因为在JavaScript中没有明确的和栈相同的容器,所以我们可以用数组来代替。通过数组的pop和push方法模拟栈的出入。

方法

/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
    const map = {
        "(": ")",
        "[": "]",
        "{": "}"
    }
    let arr = [];

    for (let i = 0; i < s.length; i++) {
        if (arr.length && arr[arr.length -1] === s[i]) {
            arr.pop();
        } else {
            arr.push(map[s[i]]);
        }
    }

    return arr.length ? false : true;
};

数组复习

常用属性: lenght

常用方法:

  • push(value)

    把元素依次添加到数组末尾

  • pop()

    删除数组最后一个元素,并返回删除的元素

  • unshift(val1, val2...)

    把元素依次添加到数组前面

  • shift()

    删除数组第一个元素,并返回删除的元素

  • splice(index, count[, val1, val2...])

    可以实现删除或者替换数组元素

  • slice(index1[, index2])

    截取数组某一部分并返回。如果没有传第二个参数,默认返回从第二个参数开始后面所有元素。

    注意:此方法不改变原有数组

  • sort() 排序

  • concat() 拼接两个数组

  • reverse() 反转数组

  • join() 拼接数组

  • forEach()

    对数组的每个元素执行一次回调函数

  • filter()

    创建一个新的数组,其中的元素是指定数组中所有符合指定函数要求的元素。

    注意:此方法不改变原有数组

  • map()

    创建一个新的数组,其中的每个元素是指定数组的对应元素调用指定函数处理后的值。

    注意:此方法不改变原有数组

  • reduce()

    使用回调函数对数组中的每个元素进行处理,并将处理进行汇总返回

  • find()

    获取使回调函数值为 true 的第一个数组元素。如果没有符合条件的元素,将返回 undefined。