【发布时间】:2021-08-11 12:53:10
【问题描述】:
我一直在接受 leetcode 挑战,遇到了一个有趣的问题:301. Remove Invalid Parentheses:
给定一个包含括号和字母的字符串
s,删除最小数量的无效括号以使输入字符串有效。返回所有可能的结果。您可以按任何顺序返回答案。
示例 1:
Input: s = "()())()" Output: ["(())()","()()()"]示例 2:
Input: s = "(a)())()" Output: ["(a())()","(a)()()"]示例 3:
Input: s = ")(" Output: [""]约束:
1 <= s.length <= 25s由小写英文字母和括号'('和')'组成。s中最多有 20 个括号。
我尝试使用递归来解决它,但我的代码有问题,它返回一个空数组而不是结果。
代码如下:
var removeInvalidParentheses = function(s) {
const validExpressions = [];
let minimumRemoved = 0;
function recurse(s, index, leftCount, rightCount, expression, removedCount) {
let possibleAnswer;
if (index === s.length) {
if (leftCount === rightCount) {
if (removedCount <= minimumRemoved) {
possibleAnswer = expression.join("");
if (removedCount < minimumRemoved) {
validExpressions.length = 0;
minimumRemoved = removedCount;
}
validExpressions.push(possibleAnswer);
}
}
} else {
let currentCharacter = s[index];
let length = expression.length;
if (currentCharacter !== '(' && currentCharacter !== ')') {
expression.push(currentCharacter);
recurse(s, index + 1, leftCount, rightCount, expression, removedCount);
expression.splice(length, 1);
} else {
recurse(s, index + 1, leftCount, rightCount, expression, removedCount + 1);
expression.push(currentCharacter);
if (currentCharacter == '(') {
recurse(s, index + 1, leftCount + 1, rightCount, expression, removedCount);
} else if (rightCount < leftCount) {
recurse(s, index + 1, leftCount, rightCount + 1, expression, removedCount);
}
expression.splice(length, 1);
}
}
}
recurse(s, 0, 0, 0, [], 0);
return validExpressions;
}
【问题讨论】:
标签: javascript string algorithm