题目链接

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.

Example:

Input: "aab"
Output: 1
Explanation: The palindrome partitioning ["aa","b"] could be produced using 1 cut.

题意同样简单明了。

解法:

由上题Palindrome Partitioning,可以得到一个解此题的思路,DFS穷举所有方案。然而,仅仅是DFS会超时。此题仅要求求得划分次数最小的方法的划分次数。在这个问题下,dfs(string &s, int idx) 返回 s[idx, s.size()-1] 这个子串最少需要多少次划分。可以发现,朴素DFS存在大量的重复计算,因为s[0, idx)子串有多少种划分法,dfs(string &s, int idx) 就会被调用多少次,而每次计算 dfs(string &s, int idx) 返回的结果都是相同的。因此,自然而然的想到记忆化搜索,也就是dp。

class Solution {
public:
vector<vector<bool>> is_palindrome;
vector<int> dp;
int minCut(string s) {
int len = s.size();
is_palindrome = std::move(vector<vector<bool>>(len, vector<bool>(len, false)));
dp = std::move(vector<int>(len, len+));
for(size_t l=; l<=len; l++)
for(size_t head=; head+l-<len; head++){
int tail = head+l-;
if(l == )
is_palindrome[head][tail] = true;
else if(s[head]==s[tail] && (head == tail- || is_palindrome[head+][tail-]))
is_palindrome[head][tail] = true;
}
int ret = len;
dfs(s, );
return dp[]-;
} int dfs(string& s, int hp){
if(hp == s.size())
return ;
if(dp[hp] < s.size()+)
return dp[hp];
int ret = s.size()+;
for(size_t i=s.size()-hp; i>=; i--)
if(is_palindrome[hp][hp+i-])
ret = min(ret, +dfs(s, hp+i));
return dp[hp] = ret;
}
};

最新文章

  1. Sublime Text执行js
  2. HBuilder从下载到使用
  3. SQL注入的分类
  4. Angularjs 跳转页面并传递参数的方法总结
  5. Android http 的使用
  6. 个人简历制作(Dreamweaver)
  7. 在 Java 中高效使用锁的技巧--转载
  8. 如风一样,飞翔------Day37
  9. 旧版本mysql下载大全,爽~~
  10. P1536 村村通
  11. OC仿QQ侧滑
  12. python+appium+yaml安卓UI自动化测试分享
  13. 排序算法(8)--Merge Sorting--归并排序--Merge sort--归并排序
  14. systemd 之 journalctl
  15. [转载]ASP.NET-----Repeater数据控件的用法总结
  16. [noip模拟题]排队
  17. 第194天:js---函数对象详解(arguments、length)
  18. rar 解压
  19. 如何在Visual Studio(VS)2012里使用libsvm工具箱
  20. Linux上安装pip以及setuptools

热门文章

  1. 002-使用Spring实现读写分离(MySQL实现主从复制)
  2. 003-Web Worker工作线程
  3. 类ThreadGroup
  4. uni-app-在开启小程序在微信开发工具打开时,打开失败,解决方法:手动打开
  5. C语言I作业12——学习总结
  6. JavaSE编码试题强化练习6
  7. 安装testlink时,出现”testlink/gui/templates_c、testlink/logs、testlink/upload_area不可写‘解决办法
  8. Navicat批量导出mysql的DDL语句
  9. JDK8 parallelStream性能测试
  10. CSS浏览器兼容性