LeetCode 1246. 删除回文子数组(区间DP)
文章目录
- 1. 题目
- 2. 解题
1. 题目
给你一个整数数组 arr,每一次操作你都可以选择并删除它的一个 回文 子数组 arr[i], arr[i+1], ..., arr[j]( i <= j)
。
注意,每当你删除掉一个子数组,右侧元素都会自行向前移动填补空位。
请你计算并返回从数组中删除所有数字所需的最少操作次数。
示例 1:
输入:arr = [1,2]
输出:2示例 2:
输入:arr = [1,3,4,1,5]
输出:3
解释:先删除 [4],然后删除 [1,3,1],最后再删除 [5]。提示:
1 <= arr.length <= 100
1 <= arr[i] <= 20
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/palindrome-removal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
dp[i][j]
表示区间[i,j]
的最少移除次数- 如果已知
dp[i][j]
,推导dp[i-1][j+1]
- 如果两侧相等
arr[i-1] == arr[j+1]
,dp[i-1][j+1] = min(dp[i-1][j+1], dp[i][j])
- 对区间而言,把区间分成任意的两份,求和取最小
对所有可能的 k,dp[i-1][j+1] = min(dp[i-1][j+1], dp[i-1][k]+dp[k+1][j+1])
class Solution {public:int minimumMoves(vector<int>& arr) {int n = arr.size(), i, j,k, len;vector<vector<int>> dp(n, vector<int>(n,INT_MAX));for(i = 0; i < n; ++i){dp[i][i] = 1;//初始化if(i < n-1 && arr[i]==arr[i+1])dp[i][i+1] = 1;else if(i < n-1 && arr[i]!=arr[i+1])dp[i][i+1] = 2;}for(len = 0; len < n; ++len){ //按长度遍历for(i = 0; i < n; ++i){j = i+len;//右端点if(j >= n || dp[i][j]==INT_MAX) continue;if(i-1 >=0 && j+1 < n){for(k = i-1; k <= j; ++k)dp[i-1][j+1] = min(dp[i-1][j+1], dp[i-1][k]+dp[k+1][j+1]);if(arr[i-1] == arr[j+1])dp[i-1][j+1] = min(dp[i-1][j+1], dp[i][j]);} }}return dp[0][n-1];}
};
440 ms 12.9 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
LeetCode 1246. 删除回文子数组(区间DP)相关推荐
- LeetCode 1332. 删除回文子序列
1. 题目 给你一个字符串 s,它仅由字母 'a' 和 'b' 组成.每一次删除操作都可以从 s 中删除一个回文 子序列. 返回删除给定字符串中所有字符(字符串为空)的最小删除次数. 「子序列」定义: ...
- LeetCode 1216. 验证回文字符串 III(DP)
文章目录 1. 题目 2. 解题 1. 题目 给出一个字符串 s 和一个整数 k,请你帮忙判断这个字符串是不是一个「K 回文」. 所谓「K 回文」:如果可以通过从字符串中删去最多 k 个字符将其转换为 ...
- 编程之美2015资格赛 题目2 : 回文字符序列 [ 区间dp ]
传送门 题目2 : 回文字符序列 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串ab ...
- LeetCode 132. 分割回文串 II(DP)
文章目录 1. 题目 2. 解题 1. 题目 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回符合要求的最少分割次数. 示例: 输入: "aab" 输出: ...
- CodeM美团点评编程大赛初赛A轮 B.合并回文子串【区间Dp】
[编程题] 合并回文子串 时间限制:2秒 空间限制:262144K 输入两个字符串A和B,合并成一个串C,属于A和B的字符在C中顺序保持不变.如"abc"和"xyz&qu ...
- 题目2 : 回文字符序列(区间DP)
时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串aba中,回文子序列为"a& ...
- [HIHO1323]回文字符串(区间dp)
题目链接:http://hihocoder.com/problemset/problem/1323 思路:区间dp,按照区间长度枚举所有区间和区间的起始位置.这时也可获取到区间的末位,比对这两个字符是 ...
- LeetCode 1278. 分割回文串 III(区间DP)
文章目录 1. 题目 2. 解题 1. 题目 给你一个由小写字母组成的字符串 s,和一个整数 k. 请你按下面的要求分割字符串: 首先,你可以将 s 中的部分字符修改为其他的小写英文字母. 接着,你需 ...
- LeetCode(9.回文数)JAVA
LeetCode(9.回文数) 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输 ...
最新文章
- 漫画:什么是快速排序?(完整版)
- python详细安装教程3.8.3-Python下载 v3.8.3 官方中文版
- 浅析商业银行“业务连续性管理体系”的构建
- 区分'方法'和'函数'
- 1026. 程序运行时间(15)-PAT乙级真题
- windows10安装过程以及使用感受
- php studay,studay是什么意思
- 2004年 联想员工亲历联想大裁员:公司不是我的家 (网易裁员事件相关文章)
- BGP 模式下 Calico 与 MetalLB 的组合
- tplink怎样设置虚拟服务器,tplink怎么设置虚拟服务器
- Linux内核为大规模支持100Gb/s网卡准备好了吗?并没有
- 宜青春 信未来,用科技创新拓宽金融科技的护城河
- 阿里巴巴高可用技术专家襄玲:压测环境的设计和搭建
- 光影学习 - 三点光照
- ORACLE 按照指定的ID 顺序排序
- python中的pip命令在cmd下用不了?
- 论文MICO for MRI bias field estimation and tissue segmentation品讲
- 【转】MUD教程--巫师入门教程2
- 老调重弹:JDBC系列 之 存储过程 CallableStatement(创建和使用)
- 常见的HTT相应状态码