代码战中有一个挑战,要求您检查括号,方括号和花括号的字符串是否有效。
如果所有括号都与正确的括号匹配,则一串括号被视为有效。
即"()"
有效,"[(])"
无效。
"(){}[]"
是有效的,"[({})](]"
不是。等等。
我已经能够创建一些逻辑来检查是否有正确数量的开合括号。
尝试:
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
...(?)进行检查。
编辑:理解此挑战的关键是闭合支架必须直接在开口支架之后,或者必须是“平行”的-彼此对称。
您可以array
用来跟踪先前出现的开括号,一旦出现任何结束标记,则需要将其与数组的最后一个值匹配(如果匹配),将最后一个值弹出,否则返回false,最后返回false空数组返回true,否则返回false
function validBraces(braces){
let tracer = []
for(let i=0;i < braces.length; i++){
if ( braces[i] === "(" || braces[i] === "{" || braces[i] === "["){
tracer.push(braces[i])
} else{
if(tracer.length === 0) return false
let lastValue = tracer[tracer.length-1]
if( (braces[i] === ']' && lastValue === '[') || (braces[i] === '}' && lastValue === '{') || (braces[i] === ')' && lastValue === '('))
{
tracer.pop()
} else {
break;
}
}
}
return tracer.length === 0
}
console.log(validBraces( "()" )) // true
console.log(validBraces( "[]" )) // true
console.log(validBraces( "{}" )) // true
console.log(validBraces( "(){}[]" )) // true
console.log(validBraces( "([{}])" )) // true
console.log(validBraces( "(}" )) // false
console.log(validBraces( "[(])" )) // false
console.log(validBraces( "({})[({})]" )) // true
console.log(validBraces( "(})" )) // false
console.log(validBraces( "(({{[[]]}}))" )) //true
console.log(validBraces( "{}({})[]" )) // true
console.log(validBraces( ")(}{][" )) // false
console.log(validBraces( "())({}}{()][][" )) // false
console.log(validBraces( "(((({{" )) // false
console.log(validBraces( "}}]]))}])" )) // false
您好,能否请您
return tracer.length === 0;
确切解释原因和原因?和之间有什么区别if (tracer.length === 0) return true;
?我现在看到,实际上,
return tracer.length === 0;
和之间没有区别if (tracer.length === 0) {return true}; else {return false};
-return tracer.length === 0;
返回一个布尔值。@ HappyHands31
===
(等于运算符)始终求值为布尔值,因此根据长度,它将返回一个布尔值