「这是我参与11月更文挑战的第4天,活动详情查看:2021最后一次更文挑战」
LeetCode20.有效的括号
题目要求
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
1.左括号必须用相同类型的右括号闭合。
2.左括号必须以正确的顺序闭合。
示例
输入:s = "()"
输出:true
思路
1.先判断这个字段s是不是成对出现的,如果不是直接return false
if (s.length % 2 == 1) return false
2.然后便利s数组,判断元素是否是左边的括号,然后保存下来
let arr = []
for (let item of s) {
if (item == '(' || item == '[' || item == '{') {
arr.push(item)
}
}
3.接着判断是不是属于右边类型的括号,如果是的话,再判断arr数组的最后一个元素是不是和正在遍历的右边的元素符合一对,如果不是return false
... else {
let arrLen = arr.length - 1
if (item == ')' && arr[arrLen] != '(') return false
if (item == ']' && arr[arrLen] != '[') return false
if (item == '}' && arr[arrLen] != '{') return false
}
4.如果左边的元素和数组的最后一个元素符合一对括号的话,就把数组的最后一个元素删除,最后如果数组的长度为0说明说有的括号都符合成对出现的要求
... else {
...
arr.pop();
}
return !arr.length;
完整代码
function isValid(s) {
if (s.length % 2 == 1) return false
let arr = []
for (let item of s) {
if (item == '(' || item == '[' || item == '{') {
arr.push(item)
} else {
let arrLen = arr.length - 1
if (item == ')' && arr[arrLen] != '(') return false
if (item == ']' && arr[arrLen] != '[') return false
if (item == '}' && arr[arrLen] != '{') return false
arr.pop()
}
}
return !arr.length
}