1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
Set<String> result; public List<String> removeInvalidParentheses(String s) { result = new HashSet<>(); int left = 0, right = 0; for (char c : s.toCharArray()) { if (c == '(') { left++; }else if (c == ')') { if (left > 0) { left--; }else { right++; } } } dfs(0, left, right, s, new StringBuilder()); return new ArrayList<>(result); }
private void dfs(int pos, int left, int right, String s, StringBuilder cur) { if (left < 0 || right < 0) { return; } if (pos == s.length()) { if (left == 0 && right == 0) { if (valid(cur.toString())) { result.add(cur.toString()); } } return; } char c = s.charAt(pos); int len = cur.length(); if (c != '(' && c != ')') { cur.append(c); dfs(pos+1, left, right, s, cur); }else if (c == '(') { dfs(pos+1, left-1, right, s, cur); cur.append(c); dfs(pos+1, left, right, s, cur); }else { dfs(pos+1, left, right-1, s, cur); cur.append(c); dfs(pos+1, left, right, s, cur); } cur.delete(cur.length()-1, cur.length()); }
private boolean valid(String sb) { int left = 0, right = 0; for (char c : sb.toCharArray()) { if (c == '(') { left++; }else if (c == ')') { if (left > 0) { left--; }else { right++; } } if (right > left) { return false; } } if (left > 0 || right > 0) { return false; } return true; }
|