-
Notifications
You must be signed in to change notification settings - Fork 171
/
PalindromePartitioning.java
46 lines (44 loc) · 1.38 KB
/
PalindromePartitioning.java
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
/*
Author: Andy, [email protected]
Date: Jan 20, 2015
Problem: Palindrome Partitioning
Difficulty: Easy
Source: https://oj.leetcode.com/problems/palindrome-partitioning/
Notes:
Given a string s, partition s such that every substring of the partition is a palindrome.
Return all possible palindrome partitioning of s.
For example, given s = "aab",
Return
[
["aa","b"],
["a","a","b"]
]
Solution: ...
*/
public class Solution {
public List<List<String>> partition(String s) {
List<List<String>> res = new ArrayList<List<String>>();
int n = s.length();
boolean[][] dp = new boolean[n][n];
for (int i = n - 1; i >= 0; --i) {
for (int j = i; j < n; ++j) {
dp[i][j]=(s.charAt(i)==s.charAt(j))&&(j<i+2||dp[i+1][j-1]);
}
}
ArrayList<String> path = new ArrayList<String>();
dfs(s, dp, 0, path, res);
return res;
}
public void dfs(String s, boolean[][] dp, int start, ArrayList<String> path, List<List<String>> res) {
if (s.length() == start) {
res.add(new ArrayList<String>(path));
return;
}
for (int i = start; i < s.length(); ++i) {
if (dp[start][i] == false) continue;
path.add(s.substring(start,i+1));
dfs(s, dp, i+1,path,res);
path.remove(path.size()-1);
}
}
}