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 ...
随机推荐
- 用 Portainer 远程管理 docker
参考的官网地址为:https://portainer.readthedocs.io/en/stable/deployment.html 先更新Centos docker 镜像加速地址: curl -s ...
- Linux基础知识之文件的权限(二)
除了基本的r,w,x之外,在linux传统的ext2.ext3.ext4文件系统下,还可以设置其他 的文件属性.如chattr,lsattr,而在CentOS7中默认利用xfs作为默认的文件系统,就不 ...
- 转载 如何使用批处理 动态改变path实现改变JDK版本
http://www.cnblogs.com/xdp-gacl/p/5209386.html 1 @echo off 2 3 rem --- Base Config 配置JDK的安装目录 --- 4 ...
- AspectJ的表达式实例
Joinpoints 连接点,通俗的讲就是想要横切的目标,这些目标包括方法(Method),构造器(Constructor),域(Field),异常(Exception),对象和类初始化(Object ...
- c# 获取api 数据
private string GetDataFromServerApi(string url, string body) { string str = ""; try { Http ...
- java 学习笔记(三)ZooKeeper集群搭建实例,以及集成dubbo时的配置 (转)
ZooKeeper集群搭建实例,以及集成dubbo时的配置 zookeeper是什么: Zookeeper,一种分布式应用的协作服务,是Google的Chubby一个开源的实现,是Hadoop的分布式 ...
- JAVA bean为何要实现序列化
简而言之:序列化,就是为了在不同时间或不同平台的JVM之间共享实例对象.即序列化出于两个原因:①.用于持久化到磁盘上:②.用于作为数据流在网络上传输. 所谓的Serializable,就是java提供 ...
- 移动端H5不常见兼容收集
1.微信分身input不支持上传,无法监听到上传事件 解决方案:判断在微信浏览器端使用微信JSSDK上传
- Linux - TCP/IP网络协议基础
1.0 Tcp / IP 背景介绍 上世纪70年代,随着计算机的发展,人们意识到如果想要发挥计算机的更大作用,就要讲世界各地的计算机连接起来. 但是简单的连接时不够的,因为计算机之间无法沟通.因此设计 ...
- 自制centos6开机界面
1.先准备好一张640x480大小的图片并上传至主机(可在画图工具中调整图片大小) 注意如没有rz命令,可以先安装: yum install lrzsz 2.制作背景图 制作需要用到convert命令 ...