前端培训丁鹿学堂:前端面试常见算法题解析(二)

122 阅读1分钟

栈是一个后进先出的数据结构。 前端的JavaScript语言中没有栈,但是可以用数组(Array)实现栈的所有功能。 进栈的方法是push,出栈的方法是pop

let arr = []
arr.push(1)
arr.push(2)
arr.pop()
console.log(arr)
栈的应用场景

需要后进先出的场景 比较典型的就是函数嵌套的调用堆栈。最深处调用的函数,也就是最后调用的函数,最先执行完。js解释器就是使用栈来控制函数的调用顺序的。

栈的练习:面试常见算法题:

题目:给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串,判断字符串是否有效

  • 左括号必须用相同类型的右括号闭合。
  • 左括号必须以正确的顺序闭合。
  • 注意空字符串可被认为是有效字符串。

解题思路:

  1. 新建一个栈
  2. 扫描字符串,遇到左括号入栈,遇到和栈顶括号类型匹配的右括号就出栈, 如果类型不匹配,直接判断为不合法
  3. 最后扫描完,如果栈是空的就合法,否则不合法
代码(JavaScript)
let result = function(str){
    if(str.length%2!==0){
        return false
    }
    let stack = []
    for(let i =0;i<str.length;i++){
        let s = str[i]
        if(s === '(' || s ==='[' || s ==='{'){
            stack.push(s)
        }else{
            let top = stack[stack.length -1]
            if((top === '(' && s === ')')||(top === '[' && s === ']')||(top === '{' && s === '}')){
                stack.pop()
            }else{
                return false
            }
        }
    }
    return stack.length === 0
}
let s = result('(((((({{{[}}}))))))')
console.log(s); // false