代码拉取完成,页面将自动刷新
package com.hit.basmath.interview.top_interview_questions.hard_collection.backtracking;
import java.util.ArrayList;
import java.util.List;
/**
* 301. Remove Invalid Parentheses
* <p>
* Remove the minimum number of invalid parentheses in order to make the input string valid. Return all possible results.
* <p>
* Note: The input string may contain letters other than the parentheses ( and ).
* <p>
* Example 1:
* <p>
* Input: "()())()"
* Output: ["()()()", "(())()"]
* <p>
* Example 2:
* <p>
* Input: "(a)())()"
* Output: ["(a)()()", "(a())()"]
* <p>
* Example 3:
* <p>
* Input: ")("
* Output: [""]
*/
public class _301 {
public List<String> removeInvalidParentheses(String s) {
List<String> ans = new ArrayList<>();
remove(s, ans, 0, 0, new char[]{'(', ')'});
return ans;
}
private void remove(String s, List<String> ans, int last_i, int last_j, char[] par) {
for (int stack = 0, i = last_i; i < s.length(); ++i) {
if (s.charAt(i) == par[0]) stack++;
if (s.charAt(i) == par[1]) stack--;
if (stack >= 0) continue;
for (int j = last_j; j <= i; ++j)
if (s.charAt(j) == par[1] && (j == last_j || s.charAt(j - 1) != par[1]))
remove(s.substring(0, j) + s.substring(j + 1, s.length()), ans, i, j, par);
return;
}
String reversed = new StringBuilder(s).reverse().toString();
if (par[0] == '(') // finished left to right
remove(reversed, ans, 0, 0, new char[]{')', '('});
else // finished right to left
ans.add(reversed);
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。