题目地址
题解
思路1:
- 思路先判断字符串是否为偶数个,如果是则利用栈的后进先出特点,如果匹配上则出栈,匹配不上则入栈,最后看栈的大小是否为0。匹配通过对象的键值对的形式匹配。
- 分析时间复杂度O(n)空间复杂度O(n)
- 代码实现
var isValid = function (s) {
if (!s.length || s.length % 2 !== 0) return false
let con = [],
// 创建映射关系
// 注意一定是(在前,所以( 是值,)是键名
map = {
')': '(',
']': '[',
'}': '{'
}
for (let i = 0; i < s.length; i++) {
if (!i) con.push(s[0])
// 判断字符串中第i个括号是否有对应值如果没有则弹出
// 与栈顶的是否匹配 匹配则弹出,不匹配则推入
else map[s[i]] && map[s[i]] === con[con.length - 1] ? con.pop() : con.push(s[i])
}
return !con.length
}