LeetCode刷题记113
131. 分割回文串
class Solution {
public void F(List<List<String>> ans, List<String> cur, int st, int n, boolean[][] c, String s) {
if (st == n) {
List<String> tmp = new ArrayList<String>();
tmp.addAll(cur);
ans.add(tmp);
}
for (int i = st; i < n; i ++) {
if (c[st][i]) {
cur.add(s.substring(st, i + 1));
F(ans, cur, i + 1, n, c, s);
cur.remove(cur.size() - 1);
}
}
}
public List<List<String>> partition(String s) {
int n = s.length();
List<List<String>> ans = new ArrayList();
if (n == 0) return ans;
boolean[][] c = new boolean[n][n];
for (int i = 0; i < n; i ++) {
c[i][i] = true;
}
for (int l = 2; l <= n; l ++) {
for (int i = 0; i < n; i ++) {
int j = i + l - 1;
if (j >= n) break;
if (l == 2 && s.charAt(i) == s.charAt(j)) {
c[i][j] = true;
} else if (s.charAt(i) == s.charAt(j)) {
c[i][j] = c[i + 1][j - 1];
}
}
}
F(ans, new ArrayList<String>(), 0, n, c, s);
return ans;
}
}
5/5
113/150