<script>
//基于数组实现栈
class Stack{
constructor(){
this.items = [];
}
//返回的长度
size(){
return this.items.length;
}
//压栈(入栈)
push(item){
this.items.push(item);
}
//弹栈(出栈)
pop(){
return this.items.pop();
}
//返回栈顶元素
peek(){
return this.items[this.items.length - 1];
}
//清空栈
clear(){
this.items = [];
}
//判断是否空栈
isEmpty(){
return this.size() == 0;
}
}
stack = new Stack();
console.log(stack.isEmpty());
stack.push(123);
console.log(stack);
stack.push(456);
stack.pop();
console.log(stack.size());
</script>
使用栈解决符号闭合问题
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
<script>
var valid = function (s) {
let stack = [];
if (s.length % 2 != 0) return false;//奇数直接为false
for (let i of s) {
//if("(){}[]".indexOf(i) == -1) return false;
if("([{".indexOf(i) != -1){
stack.push(i); //入栈
}else{
let st = stack[stack.length - 1];//栈顶元素
let c1 = i == ")" && st == "(";
let c2 = i == "}" && st == "{";
let c3 = i == "]" && st == "[";
if(c1 || c2 || c3){
stack.pop(); //出栈
}else{
return false;
}
}
};
//console.log(stack);
return stack.length == 0;//空栈说明正确闭合
}
console.log(valid("()[]{}"));
console.log(valid("[({})]"));
console.log(valid("[{(})]"));
console.log(valid("([}}])"));
</script>