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
large data

相关文章: