给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
其中有效字符串需满足:
左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合
思路:
1、判断字符串的长度,奇数直接返回 false
2、循环遍历字符串,通过map来判断是左括号还是右括号,
3、把左侧的括号 push 到一个 stk数组 中
4、如果是右侧括号,通过map来找出左侧号并和 stk数组 最后一项进行全等判断
5、不等返回false,全等则说明当前配对成功,则把 stk数组 中最后一项删除,依次比对
6、最后返回 stk数组 的长度,如果 stk数组length存在,则说明有为配对成功的,返回fasle,否则返回true
var isValid = function (s) {
const m = new Map([
[')', '('],
['}', '{'],
[']', '[']
])
const leftArr = []
for (const item of s) {
if (m.has(item)) {
// 右侧
if (!leftArr.length || m.get(item) !== leftArr[leftArr.length - 1]) {
return false
}
leftArr.pop()
} else {
// 左侧
leftArr.push(item)
}
}
return !leftArr.length
};
|