Для кодовых войн существует запрос , который просит вас проверить, допустима ли строка скобок, скобок и фигурных скобок.
Строка скобок считается действительнойесли все фигурные скобки сопоставлены с правильной фигурной скобкой.
Т.е. "()"
является действительным, а "[(])"
- нет.
"(){}[]"
является действительным, а "[({})](]"
- нет.И т. Д.
Мне удалось создать некоторую логику для проверки правильности количества открывающих и закрывающих фигурных скобок.
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;
}
}
Но я не смог придумать способ проверить, «закрывается» ли открывающая скобка перед открытием следующей скобки типа .
Может быть, что-то вроде этого?
if (
(firstChar === "(" && lastChar === ")") ||
(firstChar === "{" && lastChar === "}") ||
(firstChar === "[" && lastChar === "]")
) {
return true;
} else {
return false;
}
Но тогда это нужно будет проверить в соответствии с моими другими if-statement
... (?)
EDIT : ключом к пониманию этой проблемы является то, что закрывающая скобка должна быть либо сразу после открывающей скобки, либо она должна быть "параллельной" - в симметрии с другой.