「这是我参与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。