有效括号-CodeWars挑战

问题描述 投票:4回答:3

有一个challenge on codewars,要求您检查括号,方括号和花括号的字符串是否有效。

如果所有括号都与正确的括号匹配,则一串括号被认为是有效的。

"()"有效,"[(])"无效。

"(){}[]"有效,而"[({})](]"无效。等

我已经能够创建一些逻辑来检查打开括号和闭合括号的数量是否正确。

ATTEMPT

function validBraces(braces) {

  let parenCount = 0;
  let squareBracketCount = 0;
  let curlyBraceCount = 0;

    for (let i =0; i < braces.length; i++) {
      let character = braces[i];
        if (character === "(") {
          parenCount -= 1;
          }
        if (character === ")") {
          parenCount += 1;
          }
        if (character === "[") {
          squareBracketCount -= 1;
          }
        if (character === "]") {
          squareBracketCount += 1;
        }
        if (character === "{") {
          curlyBraceCount -= 1;
        }
        if (character === "}") {
          curlyBraceCount += 1;
        }
      }
      if (parenCount === 0 && squareBracketCount === 0 && curlyBraceCount === 0) {
        return true;
      } 
      else {
        return false;
      }
}

但是我无法提出一种方法来检查下一个括号[[type打开之前,开口括号是否“关闭”。

也许是这样?

if ( (firstChar === "(" && lastChar === ")") || (firstChar === "{" && lastChar === "}") || (firstChar === "[" && lastChar === "]") ) { return true; } else { return false; }

但是然后必须按照我的其他if-statement ...(?)进行检查>

EDIT

:理解此挑战的关键在于,闭合撑杆必须要么紧接在打开撑杆之后,要么必须“平行”-彼此对称。 代码战中有一个挑战,要求您检查括号,方括号和花括号的字符串是否有效。如果所有大括号都与...
javascript string curly-braces braces
3个回答
2
投票
您可以使用array来跟踪先前出现的开括号,一旦出现任何结束标记,则需要将其与数组的最后一个值进行匹配(如果匹配的话),将最后一个值弹出,否则返回false,最后如果留下空数组,则返回true,否则返回false

1
投票
您实际上并不需要在这里使用数组,只需使用正则表达式和递归:

0
投票
© www.soinside.com 2019 - 2024. All rights reserved.