js实现栈

<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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值