leetcode -- Palindrome Partitioning II -- 重点
2015-12-18 09:56
363 查看
https://leetcode.com/problems/palindrome-partitioning-ii/
这里其实要做两次dp
解题思路:由于这次不需要穷举出所有符合条件的回文分割,而是需要找到一个字符串s回文分割的最少分割次数,分割出来的字符串都是回文字符串。求次数的问题,不需要dfs,用了也会超时,之前的文章说过,求次数要考虑动态规划(dp)。对于程序的说明:p[i][j]表示从字符i到j是否为一个回文字符串。dp[i]表示从第i个字符到最后一个字符,最少的分割次数下,有多少个回文字符串,即分割次数+1。这道题动态规划的思路比较简单,直接上代码吧。
这是MinCut的问题,
这里从[i ————-len(s) - 1]入手,从后往前scan,why?感觉也可以从前往后。然后用j从i开始往后scan,直到s[i:j+1]是palindrome,然后就可以对这个j得到一个dp[j] +1作为dp[i]的候选,dp[i]要最终从这些候选中选出最小的
对于palindrome, 我们要运用函数f[i][j]判断i-j是否是回文
http://closure11.com/palindrome-partitioning-ii-leetcode/
http://yucoding.blogspot.hk/2013/08/leetcode-question-133-palindrome.html
code 用
/article/4981562.html
这里其实要做两次dp
思路1
参考/article/4981562.html解题思路:由于这次不需要穷举出所有符合条件的回文分割,而是需要找到一个字符串s回文分割的最少分割次数,分割出来的字符串都是回文字符串。求次数的问题,不需要dfs,用了也会超时,之前的文章说过,求次数要考虑动态规划(dp)。对于程序的说明:p[i][j]表示从字符i到j是否为一个回文字符串。dp[i]表示从第i个字符到最后一个字符,最少的分割次数下,有多少个回文字符串,即分割次数+1。这道题动态规划的思路比较简单,直接上代码吧。
这是MinCut的问题,
这里从[i ————-len(s) - 1]入手,从后往前scan,why?感觉也可以从前往后。然后用j从i开始往后scan,直到s[i:j+1]是palindrome,然后就可以对这个j得到一个dp[j] +1作为dp[i]的候选,dp[i]要最终从这些候选中选出最小的
class Solution: # @param s, a string # @return an integer # @dfs time out # @dp is how many palindromes in the word def minCut(self, s): dp = [0 for i in range(len(s)+1)] p = [[False for i in range(len(s))] for j in range(len(s))] for i in range(len(s)+1): dp[i] = len(s) - i#初始化为the possible maximal value for i in range(len(s)-1, -1, -1): for j in range(i, len(s)): if s[i] == s[j] and (((j - i) < 2) or p[i+1][j-1]): p[i][j] = True dp[i] = min(1+dp[j+1], dp[i])#这就是求所有j对应结果的最小值 return dp[0]-1
思路2
思路参考对于palindrome, 我们要运用函数f[i][j]判断i-j是否是回文
http://closure11.com/palindrome-partitioning-ii-leetcode/
http://yucoding.blogspot.hk/2013/08/leetcode-question-133-palindrome.html
code 用
/article/4981562.html
相关文章推荐
- superslide小插件,非常实用
- 【异常】Execution failed app:processDebugResources Android Studio
- Regex Failure - Bug Fixing #2
- 大整数相加和大整数相乘
- iOS开发——远程消息推送的实现
- Xcode 6之后创建PCH文件
- 与时代接轨——普实ERP系统【AIO5】终身免费
- Java基础--面向对象(内部类、异常)
- 使用eclipse创建java程序可执行jar包
- 打印函数的入参
- VP8 的败笔 VS H264
- leetcode -- Candy -- 重点
- leetcode -- Largest Number -- trick
- 使用eclipse创建java程序可执行jar包
- Objective-C 编码建议(编程习惯,规范)
- STM32的串口应用总结
- 黑客 怪客 极客 骇客 红客名词解析
- HTTP中的重定向和请求的转发
- Unity3d动态数据管理(1)Export AssetBundles
- 多个地方用同一上传图片插件