ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

14 动态规划分割回文串II

14 动态规划分割回文串II

来源:LeetCode第132题

难度:困难

描述:给定你一个字符串s,将s分割成一些子串,使得每个子串都是回文,返回符合条件的最少分割次数。分析:可以采用动态规划的方式进行求解,对于数组以及回文串的问题可以第一时间想到动态规划求解,申请一个dp[i]空间表示前i个字符分割成回文子串的最小分割次数,若[0][i]就是回文子串,从而dp[i]=0,表示不用分割,若不能够可以进行遍历0到i之间,用j表示,dp[i]=Math.max(dp[i],dp[j-1]+1)(i与j为回文子串)
 

//双指针判断是否为回文子串
private Boolean Parlindromic(String s,int beginIndex,int endIndex)
{
int begin=beginIndex;
int end=endIndex;
Boolean flag=false;
while(endIndex>beginIndex)
{
if(s.charAt(beginIndex)==s.charAt(endIndex))
{
endIndex++;
beginIndex--;
}
else
{
//主要由一个不成立,则不是回文子串,设定为false,并跳出
flag=false;
break;
}
}
return flag;
}public int minPartition(String s)
{
int []dp=new int[s.length()];
dp[0]=1;
for(int i=1;i<s.length();i++)
{
if(Parlindromic(0,i))
{
dp[i]=0;
}else
{
dp[i]=Interger.MAX_VALUE;
for(int j=1;j<i;j++)
{
if(Parlindromic(j,i))
{
dp[i]=Math.min(dp[i],dp[j-1]+1);
}
}
}}
return dp[s.length()-1];
}

返回列表