CodeWarsに挑戦する 括弧、括弧、およびカーリーブレースの弦が有効かどうかを確認するよう求められます。
すべてのブレースが正しいブレースと一致している場合、ブレースの文字列が有効であると見なされます。
NS。 "()"
有効で、"[(])"
はそうではありません。
"(){}[]"
有効で、"[({})](]"
はそうではありません。 NS。
開閉ブレースの正しい数があるかどうかを確認するためのいくつかのロジックを作成することができました。
[〜#〜]試行[〜#〜]:
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
...(?)に従ってチェックする必要があります。
[〜#〜]編集[〜#〜]:この課題を理解するための鍵は、閉鎖ブレースが開幕ブレースまたはそれの直後に来なければならないということです。もう一方の対称性で「平行」でなければなりません。
function validBraces(braces){
while(/\(\)|\[\]|\{\}/g.test(braces)){braces = braces.replace(/\(\)|\[\]|\{\}/g,"")}
return !braces.length;
}
// double regex
_
scala]あなたはこれを行うことができます
object Kata {
def validBraces(s: String): Boolean =
s.replace("()", "").replace("[]", "").replace("{}", "") match { case "" => true; case `s` => false; case x => validBraces(x) }
}
_