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.
public class Solution { public int minCut(String s) { int cuts = 0; int len = s.length(); if(len > 1){ boolean[][] isPalindrome = new boolean[len][len]; //s.substring(i, i + 1) is palindrome (substring with length 1) for(int i = 0; i < len; ++i) isPalindrome[i][i] = true; //substring with length > 1 for(int i = len - 2; i >= 0; --i){ for(int j = len - 1; j > i; --j){ if(j - i == 1) isPalindrome[i][j] = (s.charAt(i) == s.charAt(j)); else isPalindrome[i][j] = s.charAt(i) == s.charAt(j) && isPalindrome[i + 1][j - 1]; isPalindrome[j][i] = isPalindrome[i][j]; } } int[] minCutting = new int[len]; for(int i = len - 1; i >= 0; --i){ if(isPalindrome[i][len - 1]) minCutting[i] = 0; else{ int min = len + 1; for(int j = i + 1 ; j < len; ++j){ if(isPalindrome[i][j - 1]) min = (min < 1 + minCutting[j])? min : 1 + minCutting[j]; } minCutting[i] = min; } } cuts = minCutting[0]; } return cuts; } }