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.
Subscribe to see which companies asked this question
Show Tags
Show Similar Problems
思路:
尝试使用动态规划
1、dp[i]=min{dp[1]+1,dp[2]+1,…,dp[i-1]+1}判断是否是回文。
2、判断是否是回文用动态规划 p[i][j] = s[i] == s[j] && ((j-i<2)||dp[i+1][j-1])
public class Solution {
public int minCut(String s) {
int m = s.length();
int[] dp = new int[m+1];
dp[0] = 0;
int[][] p = new int[m][m];
for(int i =m-1;i>=0;i--)
{
for(int j =i;j<m;j++)
{
if(s.charAt(i) == s.charAt(j) && (j-i<2 || p[i+1][j-1] == 1))
{
p[i][j] = 1;
}
}
}
for(int i=1;i<=m;i++)
{
int min = Integer.MAX_VALUE;
int cut = 0;
if(p[0][i-1] == 1)
{
dp[i] = 0;
continue;
}
for(int j = 1;j<=i;j++)
{
if(p[j-1][i-1] == 1)
{
cut = dp[j-1] + 1;
if(cut<min){min = cut;}
}
}
dp[i] = min;
}
return dp[m];
}
}