转载:给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
解题思路
- 判断字符串的长度如果为奇数直接返回false
- 如果为偶数,则分别以成对扩号的左半部分为键,右半部分为值创建一个对象
- 把字符串转换成数组,并定义一个临时数组 result=[]
- 遍历数组如果临时数组的最后一项存在且等于当前项,则临时数组做出栈pop操作,否则把当前项的map值push放进数组
- 如果最终临时数组的长度大于零(说明部分括号不符合成对规则)返回false
- 如果临时数组长度为零 返回true
function add(s) {
let len=s.length,result=[];
if(len%2!==0){
return false
}else{
const map={
'{':'}',
'(':')',
'[':']'
}
s=s.split('')
for(let i=0;i<len;i++){
let length=result.length
if(result[length-1] && result[length-1]==s[i]){
result.pop()
}else{
result.push(map[s[i]])
}
}
}
if(result.length>0){
return false
}
return true
};
add("()]") // false
add("()") //true