Leetcode_132. Palindrome Partitioning II_[DP]
2024-09-02 06:29:26
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;
}
};
最新文章
- Sublime Text执行js
- HBuilder从下载到使用
- SQL注入的分类
- Angularjs 跳转页面并传递参数的方法总结
- Android http 的使用
- 个人简历制作(Dreamweaver)
- 在 Java 中高效使用锁的技巧--转载
- 如风一样,飞翔------Day37
- 旧版本mysql下载大全,爽~~
- P1536 村村通
- OC仿QQ侧滑
- python+appium+yaml安卓UI自动化测试分享
- 排序算法(8)--Merge Sorting--归并排序--Merge sort--归并排序
- systemd 之 journalctl
- [转载]ASP.NET-----Repeater数据控件的用法总结
- [noip模拟题]排队
- 第194天:js---函数对象详解(arguments、length)
- rar 解压
- 如何在Visual Studio(VS)2012里使用libsvm工具箱
- Linux上安装pip以及setuptools
热门文章
- 002-使用Spring实现读写分离(MySQL实现主从复制)
- 003-Web Worker工作线程
- 类ThreadGroup
- uni-app-在开启小程序在微信开发工具打开时,打开失败,解决方法:手动打开
- C语言I作业12——学习总结
- JavaSE编码试题强化练习6
- 安装testlink时,出现”testlink/gui/templates_c、testlink/logs、testlink/upload_area不可写‘解决办法
- Navicat批量导出mysql的DDL语句
- JDK8 parallelStream性能测试
- CSS浏览器兼容性