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. Gephi简单导入数据

    使用工具 Gephi-0.9.2 事前要导入的数据 Node.csv 节点:名称可以所以定,格式.csv Edge.csv 边:名称可以所以定,格式.csv 导入操作 新建项目 导入节点 新建列要与表 ...

  2. SokcetClient VC++6.0

    // SokcetClient.cpp: implementation of the SokcetClient class. // ////////////////////////////////// ...

  3. 小程序UI设计(9)-文字排版

    小程序中一般很少大段落的文字,基本是4.5个字的主题.一行标题.一行摘要.两行描述.显示时超出部分用省略号代替.下面结合工具使用介绍一下文字排版的方法.先看效果图.  工具中属性设置如下图:两行文字属 ...

  4. 记录一下linux下两个工具和一个伪代码转换流程图工具

    1.Linux下文本浏览器lynx 文本浏览器,顾名思义就是只有文本的浏览器,这个浏览器可以在命令行下打开使用 2.CURL 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可 ...

  5. C语言1-2019秋第一周作业

    第一周作业 1.你对软件工程专业或者计算机科学与技术专业了解是怎样? 软件技术专业是计算机科学的一个分支,和软件科学与技术专业相比较,软件技术专业的侧重点在开发和技术的实际应用,而对软件开发的理论要求 ...

  6. MariaDB基本命令

    --查看当前日期select current_date();--查看当前时间select current_time();--查看当前日期.时间select now();--查看当前用户select u ...

  7. 第十一章 前端开发-jQuery

    11.4.0 jQuery 11.4.1 基本知识 定义: jQuery是一个快速,小巧,功能丰富的JavaScript库 作用:它通过易于使用的API在大量浏览器中运行,使得HTML文档遍历和操作, ...

  8. Redis介绍、安装、配置

    NoSQL介绍 NoSQL(NoSQL=Not Only SQL),意为反SQL运动,是一项全新的数据库革命性运动.指的是非关系型数据库,解决了传统的关系型数据库,难以解决的超大规模和高并发的的问题 ...

  9. hdu 6065 RXD, tree and sequence

    题 OwO http://acm.hdu.edu.cn/showproblem.php?pid=6065 (2017 Multi-University Training Contest - Team ...

  10. 使用SpringSession和Redis解决分布式Session共享问题

    SpringSession优势 遵循servlet规范,同样方式获取session,对应用代码无侵入且对于developers透明化 关键点在于做到透明和兼容 接口适配:仍然使用HttpServlet ...