给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
function isValid(str) {
// 如果字符串为空或者为奇数,返回false
if (!str.length || str.length % 2 === 1) {
return false
}
let arr = []
const map = new Map([
['{', '}'],
['[', ']'],
['(', ')']]
)
for (let i = 0; i < str.length; i++) {
// 判断当前的str是否在map的key中出现
if (map.has(str[i])) { // 是前半个括号就添加到数组中
arr.push(str[i])
} else { // 如果不是就判断与数组最后的半个括号是否响应
const key = arr[arr.length - 1]
const val = map.get(key)
if (val === str[i]) {
arr.pop()
} else {
return false
}
}
}
if (arr.length === 0) {
return true
}
}
console.log(isValid('[()]{}'));