Open Mardanjan opened 4 years ago
/**
* 括号相关的算法题可能会用到栈
*/
// 封装一个栈
class Stack {
// 栈
array = []
// 获取长度
getLength () {
return this.array.length
}
// 压入栈
push (item) {
return this.array.push(item)
}
// 取出栈
pop () {
let item = this.array[this.array.length - 1]
this.array.length = this.array.length - 1
return item
}
// 查看栈顶元素
lookIndex () {
return this.array[this.array.length - 1]
}
}
/**
* 括号匹配
* 1.左括号入栈
* 2.是否为右括号,右括号与栈顶的括号匹配的话出栈 , 不匹配就返回false
* 3.遍历完字符串,如果栈时空的返回true,否则返回false
*/
let str = '()(({}[[)]]))'
let leftStr = ['(', '[', '{'], rightStr = [')', ']', '}']
let s = new Stack()
function kuoHaoPiPei (str) {
for( let i = 0; i < str.length; i++) {
if (leftStr.includes(str.charAt(i))) {s.push(str.charAt(i))}
else if (rightStr.includes(str.charAt(i))) {
if (match(s.lookIndex(), str.charAt(i))) {
s.pop()
} else {
return false
}
}
}
return s.getLength() === 0 ? true : false
function match (left, right) {
if (left == '(' && right == ')') {return true}
else if (left == '[' && right == ']') {return true}
else if (left == '{' && right == '}') {return true}
else {return false}
}
}
console.log(kuoHaoPiPei(str))