super-fool / blog

珍藏经典, 分享思想, 共同进步.加油
3 stars 0 forks source link

#83

Open super-fool opened 3 years ago

super-fool commented 3 years ago

又称堆栈, 是一种运算受限的线性表, 受限的原因: 只允许一端插入和推出, 这一端称为栈顶, 另一端称为栈底.

模拟栈:

class Stack {
   constructor() {
      this.stack = [];  
    }
    push(value) { this.stack.push(value)} // 入栈
    pop(value) { this.stack.pop(value)} // 推栈
    peek(value) { return this.stack[stack.length -1]} // 获取栈顶元素
}
super-fool commented 3 years ago

判断字符串括号是否合法 【题目】字符串中只有字符'('和')'。合法字符串需要括号可以配对。比如: 输入:"()" 输出:true 解释:(),()(),(())是合法的。)(,()(,(()是非法的。 请你实现一个函数,来判断给定的字符串是否合法。

function test(str) {
    let l = str.length
      , rightStack = [];
    if (l % 2 !== 0) {
        throw new Error('奇数字符无法匹配!')
    }
    for (let i of str) {
        if (i === '(') {
            rightStack.push(i)
            continue;
        }
        //直接跳过下面的执行, 直接下次循环
        if (i === ')') {
            if (rightStack.length < 0) {
                throw new Error('匹配失败')
            }
            rightStack.pop();
        }
        return !rightStack.length;
    }
}

test('()(())')