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 分割回文串的更多相关文章

  1. LeetCode 131. 分割回文串(Palindrome Partitioning)

    131. 分割回文串 131. Palindrome Partitioning 题目描述 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. LeetC ...

  2. Leetcode 132.分割回文串II

    分割回文串 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回符合要求的最少分割次数. 示例: 输入: "aab" 输出: 1 解释: 进行一次分割就可将 s ...

  3. Leetcode 131.分割回文串

    分割回文串 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入: "aab" 输出: [ ["aa" ...

  4. [LeetCode] 132. 分割回文串 II

    题目链接 : https://leetcode-cn.com/problems/palindrome-partitioning-ii/ 题目描述: 给定一个字符串 s,将 s 分割成一些子串,使每个子 ...

  5. Java实现 LeetCode 132 分割回文串 II(二)

    132. 分割回文串 II 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回符合要求的最少分割次数. 示例: 输入: "aab" 输出: 1 解释: 进行一 ...

  6. Java实现 LeetCode 131 分割回文串

    131. 分割回文串 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入: "aab" 输出: [ ["aa ...

  7. LeetCode 132. 分割回文串 II(Palindrome Partitioning II)

    题目描述 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回符合要求的最少分割次数. 示例: 输入: "aab" 输出: 1 解释: 进行一次分割就可将 s ...

  8. LeetCode 131. 分割回文串(Palindrome Partitioning)

    题目描述 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入: "aab" 输出: [ ["aa" ...

  9. 【LEETCODE】72、分割回文串 III 第1278题

    package y2019.Algorithm.dynamicprogramming.hard; /** * @Auther: xiaof * @Date: 2019/12/11 08:59 * @D ...

随机推荐

  1. ubuntu系统搭建samba服务

    安装samba服务 # apt-get install samba 创建一个samba服务的分享目录 # mkdir /share 创建一个samba服务限制的用户及组 #useradd public ...

  2. 微软宣布加入机密计算联盟,与谷歌和BAT 等巨头联手保护数据安全

    联盟创始成员还包括阿里巴巴.Arm.百度.谷歌.IBM.英特尔.红帽.瑞士电信和腾讯等科技公司,它提供了一个让行业聚集起来的机会,以促进使用机密计算来更好地保护数据. 建立机密计算联盟的需求源于这样一 ...

  3. mysql服务脚本

    #!/bin/bash #*************************** #* copyleft huihui 2015-08-11 #**************************** ...

  4. Python Memcached、Redis & RabbitMQ使用

    一.Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的 ...

  5. The Preliminary Contest for ICPC Asia Nanjing 2019 B. super_log (广义欧拉降幂)

    In Complexity theory, some functions are nearly O(1)O(1), but it is greater then O(1)O(1). For examp ...

  6. zencart新增configuration商店全局变量sql

    将下面代码中的 '新增商店变量1', 'ADDS_NAME_1', '新增商店变量1的值', '新增商店变量1描述'换成你需要新增的内容即可. INSERT INTO `configuration` ...

  7. php工程师各大公司要求

    腾讯: 1.熟悉WEB应用开发技术和工具: 2.熟悉至少一种网页应用开发语言,最好使用过PHP,熟悉Javascript语言: 3.熟悉http协议,数据库技术,熟悉Apache和相关的环境配置管理: ...

  8. ubuntu学习笔记-tar 解压缩命令详解(转)

    tar 解压缩命令详解 -c: 建立压缩档案 -x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能 ...

  9. Ruby2.0后版本的debug工具: byebug

    https://github.com/deivid-rodriguez/byebug/blob/master/GUIDE.md 安装: gem install byebug 使用: Rails: 直接 ...

  10. (八)zabbix获取到的数值自定义单位

    1) 查找php文件 # find / -name "func.inc.php" /usr/share/zabbix/include/func.inc.php 2)修改文件 #vi ...