JS判断包含()[]{}的字符串是否为有效闭合括号
一、定义
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
二、两种方法
- 从字符串最中心一对入手,简单粗暴 ,判断其是否为有效括号对,是就置换为空
function bracketCheck1(str){
if(!str || typeof str !== 'string'){ // 入参是否有效
return false
}
str = str.replace(/\s/g, '') // 去空
if(str.length % 2 !== 0){ // 长度为偶数才行
return false
}
while(str.includes('{}') || str.includes('[]') || str.includes('()')){
str = str.replace('{}','')
str = str.replace('[]','')
str = str.replace('()','')
}
return str === '' // 最后看字符串是否为空
}
- 利用数组,先进后出, 是左括号就把对应的右括号存入数组,不是左括号就从数组取出一位与其比较
function bracketCheck2(str){
if(!str || typeof str !== 'string'){ // 入参有效
return false
}
str = str.replace(/\s/g, '') // 去空
if(str.length % 2 !== 0){ // 长度为偶数才行
return false
}
const obj = {'(': ')', '[': ']', '{': '}'}
const arr = []
for(let i = 0; i < str.length; i ++){
if(str[i] === '{' || str[i] === '[' || str[i] === '('){ // 是有效左括号
// 就把相对应的右括号加入数组
arr.push(obj[str[i]])
}else{ // 非左括号
if( arr.length === 0 ){
// 数组为空直接返回false
return false
}else{
// 截取数组最后一位,与当前字符串比较
let p = arr.pop()
if(p !== str[i]){
// 不同就返回false
return false
}
}
}
}
return arr.length === 0 // 最后看数组是否被取空
}