leetcode 1278 分割回文串

time O(n^2*k) space O(n^2)
class Solution {
public:
int palindromePartition(string s, int K) {
//分成两步:第一步递归求将下标【i,j】变为回文子串的最小代价cost(i,j);
//cost(i,j)=cost(i+1,j-1)+(s[i]!=s[j]?1:0);
//第二步:利用cost(i,j)递归求解将0~i分为k个回文子串的最小代价dp(i,k);
//dp(i,k)=min{dp(j,k-1)+cost(j+1,i)} j range from [0,i-1],k range from [2,K];
//dp(i,1)=cost(0,i);
int len=s.length();
vector<vector<int>> cost(len,vector<int>(len,));
for(int l=;l<len;l++){
for(int i=;i<len&&(i+l<len);i++){
int j=i+l;
cost[i][j]=cost[i+][j-]+(s[i]!=s[j]?:);
}
}
vector<vector<int>> dp(len,vector<int>(K+,INT_MAX-));
for(int i=;i<len;i++){
dp[i][]=cost[][i];
for(int k=;k<=K;k++){
for(int j=;j<i;j++){
dp[i][k]=min(dp[i][k],dp[j][k-]+cost[j+][i]);
}
}
}
return dp[len-][K];
}
};
参考https://mp.weixin.qq.com/s/Da_6dqSYTa9jOzsh7sD2YQ
首先,完成第一个DP,计算回文子串所需要的cost(i,j),即将【i,j】内的字符串变为回文字符最少需要改变几个字母;
#include <bits/stdc++.h>
using namespace std;
//直接输出cost矩阵
int main()
{
cout << "Hello World"<<endl;
string s="abcde";
int len=s.length();
vector<vector<int>> cost(len,vector<int>(len,)); for(int l=;l<len;l++){
for(int i=;i<len&&(i+l<len);i++){
int j=i+l;
cost[i][j]=cost[i+][j-]+(s[i]!=s[j]?:);
}
}
for(int i=;i<len;i++){
for(int j=;j<len;j++){
cout<<cost[i][j]<<" ";
}
cout<<endl;
}
cout<<endl;
return ;
}
然后,完成第二个DP,计算dp[i][k] (k from 1 to K, i from 0 to len-1) ;
更新说明:

leetcode 1278 分割回文串的更多相关文章
- LeetCode 131. 分割回文串(Palindrome Partitioning)
131. 分割回文串 131. Palindrome Partitioning 题目描述 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. LeetC ...
- Leetcode 132.分割回文串II
分割回文串 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回符合要求的最少分割次数. 示例: 输入: "aab" 输出: 1 解释: 进行一次分割就可将 s ...
- Leetcode 131.分割回文串
分割回文串 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入: "aab" 输出: [ ["aa" ...
- [LeetCode] 132. 分割回文串 II
题目链接 : https://leetcode-cn.com/problems/palindrome-partitioning-ii/ 题目描述: 给定一个字符串 s,将 s 分割成一些子串,使每个子 ...
- Java实现 LeetCode 132 分割回文串 II(二)
132. 分割回文串 II 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回符合要求的最少分割次数. 示例: 输入: "aab" 输出: 1 解释: 进行一 ...
- Java实现 LeetCode 131 分割回文串
131. 分割回文串 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入: "aab" 输出: [ ["aa ...
- LeetCode 132. 分割回文串 II(Palindrome Partitioning II)
题目描述 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回符合要求的最少分割次数. 示例: 输入: "aab" 输出: 1 解释: 进行一次分割就可将 s ...
- LeetCode 131. 分割回文串(Palindrome Partitioning)
题目描述 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入: "aab" 输出: [ ["aa" ...
- 【LEETCODE】72、分割回文串 III 第1278题
package y2019.Algorithm.dynamicprogramming.hard; /** * @Auther: xiaof * @Date: 2019/12/11 08:59 * @D ...
随机推荐
- TCP中异常关闭的情况记录
1.当TCP连接的对端进程已经关闭了Socket的情况下,本端进程再发送数据时,第一包可以发送成功(但会导致对端发送一个RST包过来):之后如果再继续发送数据会失败,错误码为“10053: An es ...
- Delphi MSComm控件属性
- 《python解释器源码剖析》第10章--python虚拟机中的一般表达式
10.0 序 上一章中,我们通过PyEval_EvalFrameEx看到了python虚拟机的整体框架,那么这一章我们将深入到PyEval_EvalFrameEx的各个细节当中,深入剖析python的 ...
- urllib.parse:很底层,但是是一个处理url路径的好模块
介绍 urllib.parse是为urllib包下面的一个模块,urllib的其它模块完全可以使用requests替代.但是urlli.parse我们是有必要了解的,因为该模块下面有很多操作url路径 ...
- 查看是否用GPU跑的TensorFlow程序
查看是否用GPU跑的TensorFlow程序 第一种方法,直接输出日志法(推荐) import tensorflow as tf sess = tf.Session(config=tf.ConfigP ...
- Jmeter中间件处理-缓存
前言 消息队列和缓存是目前主流的中间件,我们在日常测试过程中,无论是接口还是压力测试,都会遇到需要处理这些中间件数据的情况.本文以Redis对缓存做一个简单的介绍,并基于Jmeter实现缓存数据处理. ...
- Summer training #9
A:树形DP 给出一棵树,但是它的边是有向边,选择一个城市,问最少调整多少条边的方向能使一个选中城市可以到达所有的点,输出最小的调整的边数,和对应的点 要改变的边的权值为1,不需要改变的边的权值为0, ...
- Resource ResourceLoader
DefaultResourceLoader -- > ResourceLoader 方法 ResourceLoader getResource(String location); Class ...
- select ... into outfile备份及恢复使用
select ... into outfile语句是一种逻辑备份的方法,更准确地说是导出一张表中的数据. Syntax:SELECT [ALL | DISTINCT | DISTINCTROW ...
- Create React App 安装less 报错
执行npm run eject 暴露模块 安装 npm i less less-loader -D 1.打开 react app 的 webpack.config.js const sassRege ...