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 =
Return
"aab",Return
[
["aa","b"],
["a","a","b"]
]
Solution:
We can use dynamic programming to calculate all the possible substrings if they are palindrome or not and save them in a matrix. Then we use backtracking to generate all the possible partitions.
public class Solution {
public List<List<String>> partition(String s) {
boolean [][] isPalindrome = new boolean[s.length()][s.length()];
for(int length = 0; length < s.length(); length++)
{
for(int start = 0; start < s.length()-length; start++)
{
if(length==0)
isPalindrome[start][start+length] = true;
else if(length==1)
isPalindrome[start][start+length] = s.charAt(start)==s.charAt(start + length);
else
isPalindrome[start][start+length] = isPalindrome[start+1][start+length-1] && s.charAt(start)==s.charAt(start + length);
}
}
List<List<String>> solution = new ArrayList<List<String>>();
partition(s, 0, isPalindrome, new ArrayList<String>(), solution);
return solution;
}
private void partition(String s, int index, boolean[][] isPalindrome, ArrayList<String> tempSolution, List<List<String>> solution)
{
if(index==s.length())
{
solution.add((List<String>) tempSolution.clone());
return;
}
for(int i= index; i<s.length();i++)
{
if(isPalindrome[index][i])
{
tempSolution.add(s.substring(index,i+1));
partition(s, i+1, isPalindrome, tempSolution, solution);
tempSolution.remove(tempSolution.size()-1);
}
}
}
}
No comments :
Post a Comment