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;
}
无论哪种方式,我的问题是为什么我要使用一种而不是另一种,以及基于堆栈的范式有哪些用途?