题目描述
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。
分析
输入:String, 由括号组成的字符串
输出:Boolean, 表示字符串里的括号是否可以正确闭合
解题思路
题目要求检查字符串里的括号是否闭合,我们的核心思路则是:遍历到的右括号是否可以和左括号闭合。
具体而言,如果当前遍历到的是右括号,则需要检查前边是否有一个左括号和它闭合,如果没有,那么整个字符串不合格,返回 false。
因此,我们需要把遍历到的左括号放到一个栈里,在遍历到又括号的时候从栈中弹出一个,检查是否可以闭合,如果可以,则继续检查。
代码
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function (s) {
const stack = []
const map = new Map([
["(", ")"],
["[", "]"],
["{", "}"],
])
for (const c of s) {
if (map.has(c)) {
stack.push(c)
} else {
if (map.get(stack.pop()) !== c) return false
}
}
return !stack.length
}
复杂度
时间:O(N),需要遍历字符串 空间:O(N),需要栈去存储所有的左括号,最坏情况,字符串全是左括号