1 回答
TA贡献1859条经验 获得超6个赞
一个更简洁的替代方案:
删除具有相邻匹配项的所有括号,即
"()"
。重复这个直到没有更多。这让您只剩下不匹配的括号。
计算
)
字符串中有多少。这是(
您需要添加到开头的数量。计算
(
字符串中有多少。这是)
您需要添加到最后的数量。
const fixParentheses = (str) => {
let orig = str;
//Repeatedly remove all instances of "()" until there are none left
while (str.includes("()"))
str = str.replace(/\(\)/g, '');
//Count the number of ")" and "(" left in the string
let amtOpeningParensNeeded = (str.match(/\)/g) || []).length;
let amtClosingParensNeeded = (str.match(/\(/g) || []).length;
//Add that many "(" and ")" to the string, respectively
return "(".repeat(amtOpeningParensNeeded) + orig + ")".repeat(amtClosingParensNeeded);
};
//You can ignore this, it's just a wrapper for demo/logging purposes
const test = input => { console.log(`Input: ${input}`); console.log(`Output: ${fixParentheses(input)}`)};
test(")(");
test("))))(()(");
为什么我必须将我的数组方法分成新行?为什么会stack.push('(').push(')'.repeat(stack.length)).join().replace(/[,]/gi, '');抛出错误?
您不能将其他 Array 方法链接到,.push()因为它不返回 Array;它返回一个整数,表示length数组的新值。
出于所有意图和目的,["apples","oranges"].push("banana").join()与做3.join().
添加回答
举报