算法 有效空格
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例
分析题目:
有效空格,需要满足:最先出现的左括号,右括号越晚出现
首先第一个想法就Map,左括号对应右括号
const map = new Map([
[')','('],
['}','{'],
[']','[']
])
遍历字符串,如果在map中没有没有对应的数据,那么就是左括号,反之相反
逻辑梳理:
- 如果字符串的长度是一个奇数,那么这个字符串中的括号一定是没有闭合的,直接返回false
- 创建数组,栈的数据结构,只存放左括号
- 遍历字符串
- map中存在对应的值
- 栈中数据长度为0 或者 map中对应的值与栈中最后一个的值不相同,直接返回false
- 如果栈中数据长度不为0且map中对应的值与栈中最后一个的值相等,那么就pop,弹出最后的数据
- map中不存在对应的值,添加到栈中
function isValid(s: string): boolean {
if(s.length % 2 === 1) return false
const map = new Map([
[')','('],
['}','{'],
[']','[']
])
let arr = []
for(let ch of s){
// true则是由反向括号,),},]
if(map.has(ch)){
if(!arr.length || arr[arr.length-1] !== map.get(ch)){
return false
}
arr.pop()
continue
}
arr.push(ch)
}
return !arr.length
};