博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态规划——Palindrome Partitioning II
阅读量:6820 次
发布时间:2019-06-26

本文共 871 字,大约阅读时间需要 2 分钟。

Palindrome Partitioning II
这个题意思挺好理解,提供一个字符串s,将s分割成多个子串,这些字串都是回文,要求输出分割的最小次数。
Example:
Input: "aab"
Output: 1
Explanation: The palindrome partitioning ["aa","b"] could be produced using 1 cut.
状态:这个题的状态也非常好理解,dp[i]表示将s[0..i]分割成回文子串的最小分割次数。然后不急于寻找状态转移方程,我们先要明确如何用代码判断一个字符串的某个部分是不是回文,其实也很好理解啊,咱们可以分块来理解,毕竟这是个算法题,不可能用常规的那种遍历一半的方式来判断。首先对于这个字符串的某个子串s[j..i](j<=i),满足它是回文的条件两条(1)s[j]==s[i]  (2)  只确定两端的两个字符还不够,当这个子串的长度小于4或者去掉两端的相同字符后还是回文即可。现在我们除了递推数组dp,再定义一个记录数组pa[j][i],如果s[j..i]是回文,则pa[j][i] = 1,否则为0。有了这两个条件,我们就可以总结状态转移方程了:
dp[i] = min(dp[j-1]+1),当0<j<=i时,并且s[j..i]是回文时
dp[i] = 0 ,当j=0,并且s[j..i]是回文时
在具体的dp数组递推运算过程中,需要这两个分支,同时会更新pa[j][i]的值便于后面的过程中回文条件的判断。
 
1 public int minCut(String s) { 2         int slen = s.length(); 3         int[][]pa = new int[slen][slen]; 4         int[]dp = new int[slen]; 5         for(int i = 0;i

 

转载于:https://www.cnblogs.com/messi2017/p/9904220.html

你可能感兴趣的文章
我的友情链接
查看>>
Nginx+Keepalived(带Nginx监控脚本)
查看>>
我的友情链接
查看>>
利用SVN的post-commit钩子实现多项目自动同步
查看>>
linux 的ping 命令
查看>>
java基础
查看>>
反射之获取类,方法等
查看>>
TechEd 2012 微软技术大会简介
查看>>
ajax框架之DWR项目运行报错之org.apache.commons.logging.LogFactory
查看>>
终端市场消费减少
查看>>
鲜果CEO梁公军:Google Reader的用户是我们很看重的机会
查看>>
cocos2d-x3.0beta版+NDK-r9b在android上的启动过程
查看>>
基于Spring MVC+Spring JPA技术实战开发大型商业ERP项目教程
查看>>
黑马程序员_进程和线程的区别
查看>>
DHCP原理与实例
查看>>
类的虚继承
查看>>
MySQL批量删除指定前缀表
查看>>
JDK与TOMCAT安装
查看>>
将屏幕的全部输出存到文件 转
查看>>
postgresql学习笔记(五)备份与恢复
查看>>