有效的括号 力扣刷题
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
解题思路:
首先如果输入的字符串为奇数,则一定为false
如果为偶数,则遍历字符串,遇到左半边符号则把它添加到新建的一个数组中,当遇到第一个右半边符号时,判断是否与前一个左半边符号一一对应,不对应则返回false,对应则进入下一次循环
function yanzheng(arr) {
//创建一个新数组用于存储前半部分括号
let stark = []
//keys用来储存左边符号
let keys = ['[', '{', '('];
//values用来储存右边符号
let values = [']', '}', ')'];
//遍历字符串
for (let i in arr) {
//如果字符串为奇数则一定为false
if (arr.length % 2 != 0) {
return false
}
//如果出现左边符号,则把它加入到stark数组中
if (keys.includes(arr.charAt(i))) {
stark.push(arr.charAt(i))
//如果出现右边符号,则判断这个符号对应keys的下标是否和stark数组的最后一个元素对应value的下标相同
//如果下标相同则进入下一次循环,并且删除stark数组的最后一个元素
//如果不同,则返回false
} else if (values.includes(arr.charAt(i)) && values.indexOf(arr.charAt(i)) != keys.indexOf(stark.pop())) {
return false
}
}
//最后判断循环结束后stark数组中是否还有值
//如果有则证明左边符号多于右边符号
if (stark.length != 0) {
return false
}
return true
}
总结
该题算是比较简单的算法题,很容易就能想到解题思路,当然我这个代码还可以优化,用Map键值对来代替keys和values数组,如果读者有兴趣,可以自行尝试,欢迎评论交流