💡基本思路:
- 利用栈先进后出的属性进行判断
- 如果是左括号,入栈
- 如果是右括号,如果与栈顶元素匹配栈顶弹栈,循环继续,如果不匹配,直接返回false
- 最后栈中为空,匹配,栈不为空,不匹配
🙋流程图
👏代码
/**
* 判断是否括号匹配
* @param str str
*/
export function matchBracket(str: string): boolean {
const length = str.length
if (length === 0) return true
const stack = []
const leftSymbols = '{[('
const rightSymbols = '}])'
const match = {
"}": "{",
")": "(",
"]": "["
}
for (let i = 0; i < length; i++) {
const s = str[i]
if (leftSymbols.includes(s)) {
// 左括号,压栈
stack.push(s)
} else if (rightSymbols.includes(s)) {
// 右括号,判断栈顶(是否出栈)
const top = stack[stack.length - 1]
// @ts-ignore
if (match[s]===top) {
stack.pop()
} else {
return false
}
}
}
return stack.length === 0
}
🎯总结
- 今天接触到了一个画流程图的网站还,叫Processon,里面有流程图、UML、思维导图都是我平常要用到的,关键是还免费,在这里推荐一下
点击这里去作图吧!!!
- 获取字符串的某一位直接用数组下标就行了