为什么要使用基于堆栈的解决方案?

时间:2021-05-18 22:24:53

标签: javascript stack

TL:DR = 基于堆栈的解决方案有哪些用例?

我正在学习 CodeWars,今天遇到了一个名为 Valid Braces 的问题。在答案中,人们解决问题的主要方式有两种:使用正则表达式或使用堆栈(?)。我两个都试过,但我不明白后者的目的。正则表达式解决方案(对我来说)不太密集和清晰,所以这就是我最初采用的方法。

const validBraces = (braces) => {
  const regExp = /\(\)|\[\]|\{\}/g;

  return (
      regExp.test(braces)
        ? validBraces(braces.replace(regExp, ''))
        : '' === braces
    )
}

信用:Mike K

这是我第一次看到使用堆栈来检查值,我真的没有找到一个很好的思考方式。

const validBraces = (braces) => {
  const pairs = { '(':')', '[':']', '{':'}' };
  const stack = [];

  for (const brace of braces) {
    if( pairs[brace] ) {
      stack.push(brace)
    } else {
      if (brace !== pairs[stack.pop()]) {return false}
    }
  }

  return stack.length === 0;
}

无论哪种方式,我的问题是为什么我要使用一种而不是另一种,以及基于堆栈的范式有哪些用途?

0 个答案:

没有答案