首页 > 其他分享 >(代码随想录)132. 分割回文串 II(动态规划)

(代码随想录)132. 分割回文串 II(动态规划)

时间:2024-11-10 22:19:12浏览次数:3  
标签:min int 随想录 ++ II 132 回文 dp size

132. 分割回文串 II

这一题直接将我打回cv工程师的原型

除了dp还要定义一个辅助数组,用于表示 i 区间到 j 区间是否为回文串.

 动规五部曲

1.确定dp含义

dp[i]表示0到i之间的字符串需要切割的最小次数

2.确定递推公式

第一种就是0到i之间直接就是一个回文串,那么直接dp[i] = 0;跳过

第二种就是可以由[0, j]和[j + 1, i]两部分组成, 由于我们要求最小值,因此需要遍历[0, i]之间的j ,同时不停地求min值就行

3.初始化

dp数组由于需要疯狂地求min值,这里我把他设为每一个子串能切割的上限,即dp[i] = i;

4.j需要用到上一层i的值,因此i在外层,并从左到右遍历,j从0到i遍历

5.省了

class Solution {
public:
    int minCut(string s) {
        vector<vector<bool>>v(s.size() + 1, vector<bool>(s.size() + 1, false));
        for(int i = s.size() - 1;i >= 0;--i){
            for(int j = i;j < s.size();++j){
                if(s[i] == s[j] && (j - i <= 1 || v[i + 1][j - 1])){
                    v[i][j] = true;
                }
            }
        }
        vector<int>dp(s.size() + 1, 0);
        dp[0] = 0;
        for(int i = 1; i < s.size();++i)dp[i] = INT_MAX - 1;
        for(int i = 1;i < s.size();++i){
            if(v[0][i]){
                dp[i] = 0;
                continue;
            }
            for(int j = 0;j < i;++j){
                if(v[j + 1][i]){
                    dp[i] = min(dp[i], dp[j] + 1);
                }
            }
        }
        return dp[s.size() - 1];
    }
};

动态规划还是好难[裂开]

标签:min,int,随想录,++,II,132,回文,dp,size
From: https://blog.csdn.net/2401_86659618/article/details/143589877

相关文章

  • (代码随想录)leetcode300. 最长递增子序列
    自己还是写不出来[笑哭]思路错了,自己死要去只遍历一遍代码随想录答案:classSolution{public:intlengthOfLIS(vector<int>&nums){if(nums.size()<=1)returnnums.size();vector<int>dp(nums.size(),1);//所有元素都是1长度//dp[i]......
  • 第二届生成式人工智能与信息安全国际学术会议(GAIIS 2025) 2025 2nd International Con
    @目录一、会议详情二、重要信息三、大会介绍四、出席嘉宾五、征稿主题一、会议详情二、重要信息大会官网:https://ais.cn/u/vEbMBz三、大会介绍四、出席嘉宾五、征稿主题如想"投稿"请点击如下图片......
  • 2024-2025-1 20241328 《计算机基础与程序设计》第七周学习总结
    2024-2025-120241328《计算机基础与程序设计》第七周学习总结作业信息作业课程2024-2025-1-计算机基础与程序设计作业要求2024-2025-1计算机基础与程序设计第七周作业作业目标数组与链表,基于数组和基于链表实现数据结构,无序表与有序表,树,图,子程序与参数作业正......
  • C++中的RAII与内存管理
    C++中的RAII与内存管理引言资源获取即初始化(ResourceAcquisitionIsInitialization,简称RAII)是C++编程中一种重要的编程范式,它通过对象生命周期来管理资源,确保资源在不再需要时能够被正确释放。本文将从C++的内存布局入手,逐步深入到栈区、堆区的概念,new和delete的操作原理,最终......
  • 洛谷 P1321 单词覆盖还原
    一、题目描述我有一个长度为l的字符串,最开始时,这个字符串由 l 个句号(.)组成。我在这个字符串中,将多次把 boy 或者 girl 两单词,依次贴到这个字符串中。后贴上单词,会覆盖之前贴上的单词,或者覆盖句号。最终,每个单词至少有一个字符没有被覆盖。请问,一共贴有几个 boy ......
  • 2024-2025-1 20241325 《计算机程序与设计》第七周学习总结
    2024-2025-120241325《计算机程序与设计》第七周学习总结这个作业属于的课程<2024-2025-1-计算机基础与程序设计](https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP)>这个作业要求在哪里:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK07这个作业的目标:这个作......
  • SQL,力扣题目1159,市场分析 II
    一、力扣链接LeetCode_1159二、题目描述表: Users+----------------+---------+|ColumnName|Type|+----------------+---------+|user_id|int||join_date|date||favorite_brand|varchar|+----------------+---------+us......
  • 2024-2025-1(20241321)《计算机基础与程序设计》第七周学习总结
    这个作业属于哪个课程<班级的链接>(2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(2024-2025-1计算机基础与程序设计第一周作业)这个作业的目标<了解并学习AI功能,回顾一周课程心得>作业正文...本博客链接https://www.cnblogs.com/guchua......
  • Day42 | 动态规划 :选或不选 打家劫舍&&打家劫舍II
    Day42|动态规划:选或不选打家劫舍&&打家劫舍II动态规划应该如何学习?-CSDN博客动态规划学习:1.思考回溯法(深度优先遍历)怎么写注意要画树形结构图2.转成记忆化搜索看哪些地方是重复计算的,怎么用记忆化搜索给顶替掉这些重复计算3.把记忆化搜索翻译成动态规划基本就是......
  • stm32以太网接口:MII和RMII
    前言使用stm32和lwip进行网络通信开发时,实现结构如下:而MII和RMII就是stm32与PHY芯片之间的通信接口,类似于I2C、UART等。stm32以太网模块有专用的DMA控制器,通过AHB接口将以太网内核和存储器相连。数据发送时,先将数据从存储器以DMA传输到TXFIFO中进行缓冲,然后由MAC内核......