Given a string s, partition s such that every substring of the partition is a palindrome.
Return the minimum cuts needed for a palindrome partitioning of s.
For example, given s = "aab",
Return 1 since the palindrome partitioning ["aa","b"] could be produced using 1 cut.
[解题思路]
记录所有合法的回文分割,最后得到最小的回文分割数,Large data TLE
1 public class Solution { 2 public int minCut(String s) { 3 // Start typing your Java solution below 4 // DO NOT write main() function 5 ArrayList<ArrayList<String>> result = partition(s); 6 int minCut = Integer.MAX_VALUE; 7 for(int i = 0; i < result.size(); i++){ 8 if(result.get(i).size() < minCut){ 9 minCut = result.get(i).size(); 10 } 11 } 12 return minCut - 1; 13 } 14 15 public ArrayList<ArrayList<String>> partition(String s) { 16 // Start typing your Java solution below 17 // DO NOT write main() function 18 ArrayList<ArrayList<String>> result = new ArrayList<ArrayList<String>>(); 19 ArrayList<String> output = new ArrayList<String>(); 20 int depth = 0, len = s.length(); 21 22 palinPartition(s, 0, len, output, result); 23 return result; 24 } 25 26 public void palinPartition(String s, int start, int len, ArrayList<String> output, 27 ArrayList<ArrayList<String>> result){ 28 if(start == len){ 29 ArrayList<String> tmp = new ArrayList<String>(); 30 tmp.addAll(output); 31 result.add(tmp); 32 return; 33 } 34 35 for(int i = start; i < len; i++){ 36 if(isPalindrome(s, start, i)){ 37 output.add(s.substring(start, i + 1)); 38 palinPartition(s, i + 1, len, output, result); 39 output.remove(output.size() - 1); 40 } 41 } 42 43 } 44 45 public boolean isPalindrome(String s, int start, int end){ 46 while(start < end){ 47 if(s.charAt(start) != s.charAt(end)){ 48 return false; 49 } 50 start ++; 51 end --; 52 } 53 54 return true; 55 } 56 }
updated:
using DP
Let F(i) = min cut for s[i]…s[n-1] so F(0) is our answer and we have:
F(i) = min(1 + F(j)) for j = i + 1, … n-1 and s[i]…s[j-1] is palidromic
F(i) = 0 if s[i]…s[n-1] is palindromic
1 public static int minCut(String s) { 2 // Start typing your Java solution below 3 // DO NOT write main() function 4 if (s == null) { 5 return 0; 6 } 7 int len = s.length(); 8 int[] cuts = new int[len]; 9 for (int i = len - 1; i >= 0; i--) { 10 String str = s.substring(i); 11 if (isPalindrome(str)) { 12 cuts[i] = 0; 13 } else { 14 cuts[i] = getMin(s, i, len, cuts); 15 } 16 } 17 return cuts[0]; 18 } 19 20 public static int getMin(String s, int i, int len, int[] cuts) { 21 int min = Integer.MAX_VALUE; 22 for (int j = i + 1; j < len; j++) { 23 if (cuts[j] < min && isPalindrome(s.substring(i, j))) { 24 min = cuts[j]; 25 } 26 } 27 return min + 1; 28 } 29 30 public static boolean isPalindrome(String s) { 31 int len = s.length(); 32 int i = 0, j = len - 1; 33 while (i < j) { 34 if (s.charAt(i) != s.charAt(j)) { 35 return false; 36 } 37 i++; 38 j--; 39 } 40 return true; 41 }
"a" 0 0 "ab" 1 1 "bb" 0 0 "cdd" 1 1 "dde" 1 1 "efe" 0 0 "fff" 0 0 "abbab" 1 1 "leet" 2 2 "coder" 4 4 "abcccb" 1 1 "cabababcbc" 3 3 "cbbbcc" 1 1 "ccaacabacb" 3 3 "racecar" 0 0 "danaranad" 0 0 "ababbbabbaba" 3 3 "amanaplanacanalpanama" 0 0 "seeslaveidemonstrateyetartsnomedievalsees" 0 0 "eegiicgaeadbcfacfhifdbiehbgejcaeggcgbahfcajfhjjdgj" 42 42 "kwtbjmsjvbrwriqwxadwnufplszhqccayvdhhvscxjaqsrmrrqngmuvxnugdzjfxeihogzsdjtvdmkudckjoggltcuybddbjoizu" 89 89 "ltsqjodzeriqdtyewsrpfscozbyrpidadvsmlylqrviuqiynbscgmhulkvdzdicgdwvquigoepiwxjlydogpxdahyfhdnljshgjeprsvgctgnfgqtnfsqizonirdtcvblehcwbzedsmrxtjsipkyxk" 143 143 "ababababababababababababcbabababababababababababa" 0 0 "fifgbeajcacehiicccfecbfhhgfiiecdcjjffbghdidbhbdbfbfjccgbbdcjheccfbhafehieabbdfeigbiaggchaeghaijfbjhi" 75 75 "apjesgpsxoeiokmqmfgvjslcjukbqxpsobyhjpbgdfruqdkeiszrlmtwgfxyfostpqczidfljwfbbrflkgdvtytbgqalguewnhvvmcgxboycffopmtmhtfizxkmeftcucxpobxmelmjtuzigsxnncxpaibgpuijwhankxbplpyejxmrrjgeoevqozwdtgospohznkoyzocjlracchjqnggbfeebmuvbicbvmpuleywrpzwsihivnrwtxcukwplgtobhgxukwrdlszfaiqxwjvrgxnsveedxseeyeykarqnjrtlaliyudpacctzizcftjlunlgnfwcqqxcqikocqffsjyurzwysfjmswvhbrmshjuzsgpwyubtfbnwajuvrfhlccvfwhxfqthkcwhatktymgxostjlztwdxritygbrbibdgkezvzajizxasjnrcjwzdfvdnwwqeyumkamhzoqhnqjfzwzbixclcxqrtniznemxeahfozp" 452 452 "adabdcaebdcebdcacaaaadbbcadabcbeabaadcbcaaddebdbddcbdacdbbaedbdaaecabdceddccbdeeddccdaabbabbdedaaabcdadbdabeacbeadbaddcbaacdbabcccbaceedbcccedbeecbccaecadccbdbdccbcbaacccbddcccbaedbacdbcaccdcaadcbaebebcceabbdcdeaabdbabadeaaaaedbdbcebcbddebccacacddebecabccbbdcbecbaeedcdacdcbdbebbacddddaabaedabbaaabaddcdaadcccdeebcabacdadbaacdccbeceddeebbbdbaaaaabaeecccaebdeabddacbedededebdebabdbcbdcbadbeeceecdcdbbdcbdbeeebcdcabdeeacabdeaedebbcaacdadaecbccbededceceabdcabdeabbcdecdedadcaebaababeedcaacdbdacbccdbcece" 273 273 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" 1 1