Palindrome Partitioning 原题地址:
https://oj.leetcode.com/problems/palindrome-partitioning/
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"] ]之前有道动态规划的题,加一个dfs就可以。
public class Solution {
private List<List<String>> plist = new ArrayList<List<String>>();
public List<List<String>> partition(String s) {
if (s == null || s.length() == 0)
return plist;
int len = s.length();
boolean[][] palin = new boolean[len][len];
for (int h = 0; h < len; h++)
for (int i = 0; i < len-h; i++) {
if (s.charAt(i) == s.charAt(i+h) && (h < 2 || palin[i+1][i+h-1]))
palin[i][i+h] = true;
}
LinkedList<String> list = new LinkedList<String>();
dfs(palin, list, s, 0);
return plist;
}
private void dfs(boolean[][] palin, LinkedList<String> list, String s, int v) {
if (v == s.length()) {
List<String> _list = (List<String>) list.clone();
plist.add(_list);
return;
}
for (int w = v; w < s.length(); w++) {
if (palin[v][w]) {
String temp = s.substring(v, w+1);
list.add(temp);
dfs(palin, list, s, w+1);
list.pollLast();
}
}
}
}