一、题目
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
1、左括号必须用相同类型的右括号闭合。
2、左括号必须以正确的顺序闭合。
二、示例
示例 1
输入:s = "()"
输出:true
示例2
输入:s = "()[]{}"
输出:true
示例3
输入:s = "(]"
输出:false
三、解题思路
本题采用的解题方法是使用栈数据结构
,如果遇到{
,[
,(
的话,则入栈,如果遇到)
,}
,]
的话,则出栈比较,判断是否是左右括号。
四、代码方法一
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
let array = []
for(let i = 0; i < s.length; i++) {
if(s[i] === "(" || s[i] === "{" || s[i] === "[") {
array.push(s[i])
}else {
let cur = array.pop()
if(cur === "(" && s[i] === ")" ||
cur === "[" && s[i] === "]" ||
cur === "{" && s[i] === "}") {
continue
}else {
return false
}
}
}
return array.length === 0
};
上述代码我们使用判断,导致代码很冗余。此时我们可以使用map
来保存{ },(), []
之间的关系。
具体代码如下图所示。
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
let array = []
let map = new Map()
map.set("(", ")")
map.set("{", "}")
map.set("[", "]")
for(let i = 0; i < s.length; i++) {
if(map.has(s[i])) {
array.push(s[i])
}else {
if(map.get(array.pop()) === s[i]) {
continue
}else {
return false
}
}
}
return array.length === 0
};
五、结果
时间复杂度为O(n),空间复杂度为O(n)。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_47450807/article/details/123148884
内容来源于网络,如有侵权,请联系作者删除!