一、题目描述:
20. 有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
提示:
1 <= s.length <= 104
s 仅由括号 '()[]{}' 组成
二、思路分析:
符号完整闭合,编辑器监测都运用 栈 的概念,左侧符号入栈,右侧符号则匹配栈最后一项,相对应即可出栈,最后栈长度为零代表成功。
解法1 栈
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
const Map = {
'(':')',
'{':'}',
'[':']'
}
let stack = []
for(let i=0;i<s.length;i++){
let item = s[i]
if(Map[item]){
stack.push(item)
} else {
let end = stack.pop()
if(Map[end] !== item){
return false
}
}
}
return stack.length === 0
};
解法2 replace
加入输入正确的情况下,s长度为偶数,总会有不少于一组的闭合符号。那么循环length/2次,每次匹配闭合符号清空,最后字符串长度为0即表示成功!
var isValid = function(s) {
let len = s.length/2
for(let i=0; i<len; i++){
s = s.replaceAll('()','').replaceAll('{}','').replaceAll('[]','')
}
return s.length === 0
};
效率好低。。。不过思路牛