文章目录

  • 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)相关推荐

  1. LeetCode 1332. 删除回文子序列

    1. 题目 给你一个字符串 s,它仅由字母 'a' 和 'b' 组成.每一次删除操作都可以从 s 中删除一个回文 子序列. 返回删除给定字符串中所有字符(字符串为空)的最小删除次数. 「子序列」定义: ...

  2. LeetCode 1216. 验证回文字符串 III(DP)

    文章目录 1. 题目 2. 解题 1. 题目 给出一个字符串 s 和一个整数 k,请你帮忙判断这个字符串是不是一个「K 回文」. 所谓「K 回文」:如果可以通过从字符串中删去最多 k 个字符将其转换为 ...

  3. 编程之美2015资格赛 题目2 : 回文字符序列 [ 区间dp ]

    传送门 题目2 : 回文字符序列 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串ab ...

  4. LeetCode 132. 分割回文串 II(DP)

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

  5. CodeM美团点评编程大赛初赛A轮 B.合并回文子串【区间Dp】

    [编程题] 合并回文子串 时间限制:2秒 空间限制:262144K 输入两个字符串A和B,合并成一个串C,属于A和B的字符在C中顺序保持不变.如"abc"和"xyz&qu ...

  6. 题目2 : 回文字符序列(区间DP)

    时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串aba中,回文子序列为"a& ...

  7. [HIHO1323]回文字符串(区间dp)

    题目链接:http://hihocoder.com/problemset/problem/1323 思路:区间dp,按照区间长度枚举所有区间和区间的起始位置.这时也可获取到区间的末位,比对这两个字符是 ...

  8. LeetCode 1278. 分割回文串 III(区间DP)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个由小写字母组成的字符串 s,和一个整数 k. 请你按下面的要求分割字符串: 首先,你可以将 s 中的部分字符修改为其他的小写英文字母. 接着,你需 ...

  9. LeetCode(9.回文数)JAVA

    LeetCode(9.回文数) 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输 ...

最新文章

  1. 漫画:什么是快速排序?(完整版)
  2. python详细安装教程3.8.3-Python下载 v3.8.3 官方中文版
  3. 浅析商业银行“业务连续性管理体系”的构建
  4. 区分'方法'和'函数'
  5. 1026. 程序运行时间(15)-PAT乙级真题
  6. windows10安装过程以及使用感受
  7. php studay,studay是什么意思
  8. 2004年 联想员工亲历联想大裁员:公司不是我的家 (网易裁员事件相关文章)
  9. BGP 模式下 Calico 与 MetalLB 的组合
  10. tplink怎样设置虚拟服务器,tplink怎么设置虚拟服务器
  11. Linux内核为大规模支持100Gb/s网卡准备好了吗?并没有
  12. 宜青春 信未来,用科技创新拓宽金融科技的护城河
  13. 阿里巴巴高可用技术专家襄玲:压测环境的设计和搭建
  14. 光影学习 - 三点光照
  15. ORACLE 按照指定的ID 顺序排序
  16. python中的pip命令在cmd下用不了?
  17. 论文MICO for MRI bias field estimation and tissue segmentation品讲
  18. 【转】MUD教程--巫师入门教程2
  19. 老调重弹:JDBC系列 之 存储过程 CallableStatement(创建和使用)
  20. 常见的HTT相应状态码

热门文章

  1. 常用公差配合表图_ER弹簧夹头配套BT刀柄常用规格型号表
  2. oracle-11g-R2监听文件配置
  3. Platform Invoke and Marshaling Data: [1/3]
  4. vbox虚拟机配置Redhat6.4本地yum源
  5. 线程属性 pthread_attr_t
  6. Hive简单实际操作(二)
  7. .NET 二维码生成(ThoughtWorks.QRCode)
  8. 数据结构之线性结构之堆栈
  9. Web前端学习笔记:Bootstrap
  10. 处理字符集中的算式问题