试图解决这个代码战挑战:
您的工作是修复括号,以便所有左括号和右括号(括号)都有匹配的对应项。您将通过在字符串的开头或结尾附加括号来完成此操作。结果应该是最小长度。不要添加不必要的括号。
输入将是一个不同长度的字符串,只包含“(”和/或“)”。
例如:
Input: ")("
Output: "()()"
Input: "))))(()("
Output: "(((())))(()())"
我的想法是创建一个“堆栈”,然后在遇到“相反”括号时将该堆栈推入最终数组。
const fixParentheses = (str) => {
let array = Array.from(str);
let final = [];
let stack = [];
for (let j = 0; j < array.length; j++) {
if (array[j] === ')' && array[j + 1] === ')'){
stack.push(')');
}
if (array[j] === ')' && array[j + 1] === '(') {
stack.push(')');
stack.unshift('('.repeat(stack.length));
stack = stack.join();
stack = stack.replace(/[,]/gi, '');
final.push(stack);
stack = [];
}
if (array[j] === '(' && array[j + 1] === '(') {
stack.push('(');
}
if (array[j] === '(' && array[j + 1] === ')') {
stack.push('(');
stack.push(')'.repeat(stack.length));
stack = stack.join();
stack = stack.replace(/[,]/gi, '');
final.push(stack);
stack = [];
}
}
return final.join('');
}
console.log(fixParentheses('))))(()('));
期望的输出: '(((())))(()())'
问题是这是平衡的,但顺序不正确。
我不知道如何解释我们看到的情况(()(,而函数不会变得太复杂(它已经是这样了)。
另外,您能否向我解释一下为什么我目前必须在不同的行上分开我的数组方法?即为什么
stack.push('(');
stack.push(')').repeat(stack.length));
stack = stack.join();
stack = stack.replace(/[,]/gi, '');
不会产生错误,但是stack.push('(').push(')'.repeat(stack.length)).join().replace(/[,]/gi, '');呢?我想优化。
BIG阳
相关分类