题目
判断一个字符串是否括号匹配, 一个字符串可能包含(){}[] 这三种括号。
思路
每个括号都是成对存在的, 遍历字符串过程中,如果是 左括号就保存起来, 如果是右括号,就看下是否和保存的括号最后一个匹配,不匹配就结束,匹配就删掉最后的括号,如果最后遍历完,保存的内容还有剩余,也是不匹配。
保存括号使用栈, 特点是 后进先出
代码实现
let str = 'oiidj({})jdh'
function isMatch (str) {
const stack = [];
let itemMap = {
')':"(",
"}":"{",
"]":'['
}
for (let i=0; i<str.length; i++) {
let item = str[i]
if (item==='('|| item==='{' || item==='[') {
stack.push(item)
}
if (item===')'|| item==='}' || item===']') {
let enditem = stack.pop()
if (enditem != itemMap[item]) {
return false
}
}
}
return !stack.length
}
console.log(isMatch(str))
复杂度分析
- 时间复杂度 在代码中使用了一次循环遍历, 时间复杂度为O(n)
- 空间复杂度 创建了一个数组 stack 长度可能是 传入字符串的长度, 空间复杂度为O(n)
2周刷完100道前端优质面试真题 更多视频及资料领取请关注:奋斗的刚子