题目:
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"] ]查找一个字符串中所有回文数划分:
思路:
1. 利用dp记录任意子串是否为回文
2. 采用dfs搜索全路径
代码:
public class Solution {
public List<List<String>> partition(String s) {
int dp[][] = new int[s.length()][s.length()];
List<List<String>> result = new LinkedList<List<String>>();
List<String> path = new LinkedList<String>();
for(int i=0;i<s.length();i++)
{
for(int j=i;j<s.length();j++)
{
if(isPalindrome(s.substring(i, j+1)))
dp[i][j]=1;
}
}
dfs(dp,s,result,path,0);
return result;
}
private void dfs(int dp[][],String s,List<List<String>> result,List<String> path,int start)
{
if(start == s.length())
{
List<String> temp = new LinkedList<String>(path);
result.add(temp);
return ;
}
for(int i= start;i<s.length();i++)
{
if(dp[start][i]==1)
{
path.add(s.substring(start, i+1));
dfs(dp,s,result,path,i+1);
path.remove(path.size()-1);
}
}
}
static boolean isPalindrome(String s)
{
for(int i=0;i<s.length()/2;i++)
{
if(s.charAt(i)!=s.charAt(s.length()-1-i))
{
return false;
}
}
return true;
}
}