LeetCode之Palindrome Partitioning II
2015-07-16 19:55
267 查看
/*动态规划法。 用dp[i]表示s[0...i]的最小cut数目。令j<=i, 1)如果s[j...i]是回文串,那么dp[i] = min{dp[j-1]+1, dp[i]}; 2)如果s[j...i]不是回文串,那么i...j这些子字符串无法合并,它们对减少cut数目 没有贡献,此时无需更新dp数组。 为了判断s[j...i]是否是回文串,需要用一个二维数组来记录。*/ class Solution { public: int minCut(string s) { if(s.empty()) return 0; vector<int> dp(s.size(), 0); vector<vector<int> > f(s.size(), vector<int>(s.size(), 0)); for(int i = 0; i < s.size(); ++i){ dp[i] = i; f[i][i] = 1; } for(int i = 0; i < s.size(); ++i){ for(int j = i; j >= 0; --j){ if(s[i] == s[j] && (i - j < 2 || f[j+1][i-1] == 1)){//s[j,i]是回文串 f[j][i] = 1; dp[i] = min(j>0 ? dp[j-1]+1 : 0, dp[i]); } } } return dp[s.size()-1]; } };
相关文章推荐
- 指针的问题4 不一样的数组指针
- Android Studio中获取sha1证书指纹数据的方法
- 克鲁斯卡尔算法
- 搜索引擎和知识图谱那些事 (上).基础篇
- 奇异值分解
- 【JavaScript】——基础(一)
- android屏幕适配详解
- 矩阵求导小结
- Android解析四种启动模式
- android wheelView
- opencv 灰度直方图 一维直方图
- 点选择的总结一
- Bengio最新博文:深度学习展望
- Xcode快捷键
- ipc\$详细用法介绍
- poj
- 知识分子真正的悲哀是依附强权放弃说理
- win7/8.1点击鼠标右键时候很慢迟迟才有反应的解决方法
- 并查集(保存分组结果)
- iOS开发 ----- vim相关以及常用shell命令