//先封装一个栈js文件(也可以不用)
//第一步
class Stack {
constructor() {
this.item = []
}
//原型上的方法写这里
// 1.添加一个新元素到栈顶位置
push(el) {
this.item.push(el)
}
// 2.拿出栈顶的元素
pop() {
return this.item.pop()
}
// 3.返回栈顶的元素,不对栈做任何修改
peek() {
return this.item[this.item.length - 1];
}
// 4.如果栈里没有任何元素就返回true,否则返回false
isEmpty() {
return this.item.length == 0;
}
// 5.移除栈内所有元素
clear() {
this.item = [];
}
// 6.返回栈里的元素个数。这个方法和数组的`length`属性很类似
size() {
return this.item.length;
}
}
//第二步
let str = "{[()]}]";
str = str.split('');
console.log(test(s));
function test(arr) {
let stack = new Stack();
const obj = {
'(': ')',
'[': ']',
'{': '}'
};
for (let i = 0; i < arr.length; i++) {
let m = arr[i];
//如果是左括号进栈
if(obj[m]) {
// push() ES5- 在最后一位新增,返回长度 原数组改变
stack.item.push(m)
}else {
// pop() ES5- 删除最后一位,并返回删除的数据 原数组改变
if(stack.item.length==0 || obj[stack.item.pop()] != m){
return false
}
}
}
return !stack.item.length
}
// 可以不用栈 直接用数组就行了 都是push pop 方法 先入后出
括号匹配-栈
最新推荐文章于 2024-08-15 08:55:57 发布