📌  相关文章
📜  使用堆栈检查表达式(格式良好)中的平衡括号的 Javascript 程序(1)

📅  最后修改于: 2023-12-03 15:36:38.958000             🧑  作者: Mango

JavaScript程序:使用堆栈检查表达式(格式良好)中的平衡括号

在JavaScript中使用堆栈(stack)可以检查表达式中的平衡括号是否格式良好。

如何检查平衡括号
步骤1:创建一个空的堆栈

为了检查表达式中的平衡括号,我们需要一个堆栈,将括号推入堆栈,并在遇到相应的后括号时将其从堆栈中弹出。首先,我们需要创建一个空的堆栈。

let stack = [];
步骤2:迭代表达式字符

接下来,我们需要迭代表达式中的每个字符,并检查是否为左括号或右括号。

for(let i=0; i<expression.length; i++) {
    let currentChar = expression[i];
    // 检查当前字符是否为左括号或右括号
    // ...
}
步骤3:检查左括号

对于左括号,我们将其推入堆栈。

if(currentChar === "(") {
    stack.push(currentChar);
}
步骤4:检查右括号

对于右括号,我们需要检查堆栈是否为空(即表达式中是否存在左括号),如果不是,则弹出堆栈,并检查是否为相应的左括号。如果不是,则表示表达式中的括号不平衡,返回false。

if(currentChar === ")") {
    // 检查是否存在左括号
    if(stack.length === 0) {
        return false;
    }
    // 如果堆栈不为空,则弹出并检查左括号
    let topChar = stack.pop();
    if(topChar !== "(") {
        return false;
    }
}
步骤5:检查最终堆栈是否为空

最后,我们需要检查堆栈是否为空,如果不为空,则表达式中存在左括号没有相应的右括号。如果为空,则表达式中的括号格式完全正确,返回true。

if(stack.length !== 0) {
    return false;
}
return true;
完整代码
function isBalanced(expression) {
    let stack = [];
    for(let i=0; i<expression.length; i++) {
        let currentChar = expression[i];
        if(currentChar === "(") {
            stack.push(currentChar);
        }
        if(currentChar === ")") {
            if(stack.length === 0) {
                return false;
            }
            let topChar = stack.pop();
            if(topChar !== "(") {
                return false;
            }
        }
    }
    if(stack.length !== 0) {
        return false;
    }
    return true;
}

console.log(isBalanced("((()))")); // true
console.log(isBalanced("(()))")); // false

参考资料:JavaScript 数据结构和算法 - 堆栈(stack)