给定一个字符串只包含空字符、中括号、大括号、小括号
-
- 左括号必须以相同类型的右括号闭合
-
- 左括号必须以正确的顺序闭合
function isValid(s) {
const arr=[]
const map = new Map([['}','{'],[')','('],[']','[']])
const left = Array.from(map.keys()),right = Array.from(map.values())
for(let i of s) {
if (i===' ') continue
if (right.includes(i)){
arr.push(i)
} else {
const k = map.get(i)
const last = arr.pop()
if (last!==k) return false
}
}
return !arr.length
}
思路
- 给定一个map包含左右对称括号的映射关系,声明一个数组当做栈来使用
- 遍历字符串、如果是空字符不做处理,如果是左括号,则推入栈
- 如果是右括号,则判断栈尾是否是对应的左括号,是则对应左括号退栈
- 遍历结束,判断栈是否为空,为空则说明括号匹配