dp算法篇Day8

news2024/11/27 18:24:56

 "留下一首痛斥我的歌"


36、最长回文子串

(1) 题目解析

         针对这一类回文串的动规问题得出该题解的状态表达式,不是经验+题目要求,以什么位置为结尾…… 因为,这样定义的状态表达式是得不出求不出转移方程的。

(2) 算法原理

        

class Solution {
public:
    string longestPalindrome(string s) {
        int n = s.size();

        vector<vector<bool>> dp(n,vector<bool>(n));

        int len = 0,begin = 0;
        for(int i=n-1; i>=0; --i) // 从上往下
        {
            // [i,j]
            for(int j=i; j<n;++j) // 从左往右
            {
                if(s[i] == s[j]) dp[i][j] = i+1 < j ? dp[i+1][j-1]:true;

                if(dp[i][j] && j-i+1 > len)
                {
                    // 判断
                    len = j - i + 1;
                    begin = i;
                }
            }
        }
        return s.substr(begin,len);
    }
};

37、回文串分割Ⅳ

(1) 题目解析

(2) 算法原理

class Solution {
public:
    bool checkPartitioning(string s) {
        int n = s.size();

        vector<vector<bool>> dp(n,vector<bool>(n));
        for(int i=n-1;i>=0;--i)
        {
            for(int j=i; j<n;++j)
            {
                if(s[i] == s[j]) dp[i][j] = i + 1 < j ? dp[i+1][j-1] : true;
            }
        } 

        // 枚举第二个字符串开头~留最后一个
        for(int i=1; i<n-1;++i)
        {
            // 枚举第三个字符串开头
            for(int j=i;j<n-1;++j)
            {
                if(dp[0][i-1] && dp[i][j] && dp[j+1][n-1])
                    return true;
            }
        }
        return false;
    }
};

38、回文串分割Ⅱ

(1) 题目解析   

         虽然这道题的要求是求最少的分割次数,但是和之前的回文串分割是大差不差的。

(2) 算法原理

class Solution {
public:
    int minCut(string s) {
        int n = s.size();

        vector<vector<bool>> isPal(n,vector<bool>(n));
        for(int i=n-1; i>=0;--i)
        {
            for(int j=i; j<n; ++j)
            {
                if(s[i] == s[j]) isPal[i][j] = i + 1 < j ? isPal[i+1][j-1]:true;
            }
        }

        // 处理分割次数
        // dp[i]: [0,i]的最少分割次数
        vector<int> dp(n,INT_MAX);
        for(int i=0; i<n;++i)
        {
            if(isPal[0][i]) dp[i] = 0;
            else 
            {
                // 不是回文 枚举0~i
                for(int j=1; j<=i;++j)
                {
                    // j~i是回文串
                    if(isPal[j][i]) dp[i] = min(dp[j-1]+1,dp[i]);
                }
            }
        }
        return dp[n-1];
    }
};

39、最长回文子序列

 (1) 题目解析

(2) 算法原理

class Solution {
public:
    int longestPalindromeSubseq(string s) {
        int n = s.size();
        // dp[i][j]: [i,j]区间里最长回文子序列
        vector<vector<int>> dp(n,vector<int>(n));
        for(int i=n-1; i>=0; --i)
        {
            // 因为j是从i位置起的 但是 i==j时 长度为1
            dp[i][i] = 1;
            for(int j=i+1;j<n;++j)
            {
                if(s[i] == s[j])
                    dp[i][j] = dp[i+1][j-1]+2;  
                else
                    dp[i][j] = max(dp[i][j-1],dp[i+1][j]);
            }
        }
        return dp[0][n-1];
    }
};

40、让字符串成为回文串的最小插入次数​

(1) 题目解析

 

(2) 算法原理

class Solution {
public:
    int minInsertions(string s) {
        int n = s.size();
        vector<vector<int>> dp(n,vector<int>(n));
        for(int i=n-1;i>=0;--i)
        {
            // 因为 i==j 直接为0 这个位置不用考虑
            for(int j=i+1;j<n;++j)
            {
                if(s[i] == s[j]) dp[i][j] = dp[i+1][j-1];
                else dp[i][j] = min(dp[i][j-1],dp[i+1][j]) + 1;
            }
        }
        return dp[0][n-1];
    }
};

        


本篇到此结束,感谢你的阅读。

祝你好运,向阳而生~ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/764146.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初识mysql数据库之索引概念与磁盘效率问题

目录 一、索引的概念及作用 二、实际看看索引的效率提升 三、认识磁盘 1. 简单了解磁盘 2. 数据库文件存储位置 3. 定位扇区 4. 数据读取效率问题 5. 磁盘随机访问与磁盘连续访问 5.1 随机访问 5.2 连续访问 四、mysql与磁盘的交互 五、建立共识 一、索引的概念及…

讯为RK3568开发板到手编译buildroot系统入坑一

从事单片机开发多年一直想买一个开发板学习Linux系统&#xff0c;这次狠心花了800多打样买了一个讯为的RK3568低配。裸板配置。 因为讯为没有编译系统的视频教程&#xff0c;只有文档的教程&#xff0c;而且只有瑞芯微官方带的Linux源码中的系统编译后文档教程。像ubuntu是没有…

网络编程Java Socket(UDP/TCP 套接字)

Socket是什么&#xff1f; 想知道Socket是什么就先得了解一下什么是网络编程 网络编程&#xff0c;通过代码来控制两个主机的进程之间能够进行数据交互。 操作系统就把网络编程的一些相关操作&#xff0c;封装起来了&#xff0c;提供了一组API供程序员使用。操作系统提供的功能…

Windows NT 驱动程序的编译、安装、调试

Windows NT 驱动程序的编译、安装、调试 Windows NT 驱动介绍NT 驱动代码分析编译安装修改注册表进行安装使用工具 DriverMonitor 进行打开加载安装 调试 Windows NT 驱动介绍 Windows 驱动分为两类&#xff0c;一类是从 Windows NT 遗留下来的驱动模型称为传统的 Windows NT …

1、Winform项目创建

项目创建的过程时比较简单的,要点在于选择基本库。 这里我们选择.Netframework 4.7.2,为什么使用这个呢?因为这个大多数windows系统上都装的有。如果使用.Net Core什么的,可能还需要再下载对应的运行库,影响用户体验。 具体步骤如下: 选择创建新项目 选择创建桌面应用…

RabbitMQ如何保证消息的可靠性6000字详解

RabbitMQ通过生产者、消费者以及MQ Broker达到了解耦的特点&#xff0c;实现了异步通讯等一些优点&#xff0c;但是在消息的传递中引入了MQ Broker必然会带来一些其他问题&#xff0c;比如如何保证消息在传输过程中可靠性&#xff08;即不让数据丢失&#xff0c;发送一次消息就…

GDB调试基础知识

文章目录 概念准备工作常用命令说明启动与退出给程序设置参数/获取设置参数GDB使用帮助查看当前文件代码查看非当前文件代码查看及设置显示的行数断点操作调试操作 概念 GDB 是由 GNU 软件系统社区提供的调试工具&#xff0c;同 GCC 配套组成了一套完整的开发环境&#xff0c;…

Python基础教程——60个基础练习(三)

41-字符串格式化 "%s is %s years old" % (bob, 23) # 常用 "%s is %d years old" % (bob, 23) # 常用 "%s is %d years old" % (bob, 23.5) # %d 是整数 常用 "%s is %f years old" % (bob, 23.5) "%s is %5.2f…

ListBox基本用法

作用&#xff1a;列表框&#xff0c;用于以列表的形式展示数据。 常用属性&#xff1a; 允许多列显示数据 添加数据项集合 常用事件&#xff1a; 选择项变化时触发该事件 后台代码示范&#xff1a; //列表框项目选择变化时被触发private void listBox1_SelectedIndexChanged…

Flutter 跳转应用市场评分——超简洁实现

最近在做flutter跳转去应用市场评分的功能&#xff0c;虽然是一个很小的功能&#xff0c;但是要做的既简单又高效&#xff0c;同时又能把细节考虑到&#xff0c;还是有坑要走的&#xff0c;这边记录一下。 背景 做应用市场相关的运营&#xff0c;在app内增加评分引导&#xf…

经典目标检测R-CNN系列(1)开山之作R-CNN

经典目标检测R-CNN系列(1)开山之作R-CNN 2014年&#xff0c;大神RBG&#xff08;Ross Girshick&#xff09;等人将卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;应用于目标检测任务中&#xff0c;在PASCAL VOC 2012数据集上&#xff0c;能…

vue 如何发布并部署到服务器

一般情况npm run build即可 从而生成vue代码直接放到服务器即可 这里的具体情况要看package.json里面的配置从而使用命令 会生成dist就是该项目的发布包

软件测试项目经验重要吗?

目前从行业薪资排名看&#xff0c;IT行业是我们普通人能够接触到的高薪行业&#xff0c;像金融、银行和投行等高薪职位&#xff0c;张雪峰老师在他的视频中分析过&#xff0c;不是一般人可以拿捏的。IT行业的大部分岗位需要专业的技能&#xff0c;留给我们这些非计算机专业科班…

实现微信机器人开发,个微api

首先微信聊天机器人&#xff0c;是一种通过自然语言模拟人类进行对话的程序。通常运行在特定的软件平台上&#xff0c;如PC平台或者移动终端设备平台。 有兴趣的可以去进行测试&#xff08;E云管家&#xff09;&#xff0c;功能十分全面 文档测试过程中实现多项功能进行管理 …

数据结构--线性表的链式存储结构

这里写目录标题 链式存储结构链表简介格式分类头结点位置示意图与不带头结点的区别 链表的特点 单链表定义链表的代码实现简介实操 基本操作的实现初始化单链表销毁单链表清空单链表求单链表表长 二级目录二级目录二级目录二级目录二级目录二级目录 链式存储结构 链表 简介 格…

QML学习day1

QML学习day1 main.qml import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.5Window {width: 640height: 480visible: truecolor:"blue"title: qsTr("Hello World")Button {//按钮id: btn1width: 50height: 50focus: true //聚焦…

P106-100组A卡(R5 240)指南

P106-100组A卡&#xff08;R5 240&#xff09;指南 不建议小白尝试 不建议小白尝试 不建议小白尝试文章目录 P106-100组A卡&#xff08;R5 240&#xff09;指南资料合集硬件软件基础卸载所有原驱动安装驱动修改注册表自动调用——只改一个注册表手动调用——改两个注册表 劝退…

软件设计原则

在软件开发中&#xff0c;为了提高软件系统的可维护性和可复用性&#xff0c;增加软件的可扩展性和灵活性&#xff0c;程序员要尽量根据6条原则来开发程序&#xff0c;从而提高软件开发效率、节约软件开发成本和维护成本。 开闭原则 对扩展开放&#xff0c;对修改关闭。在程序…

Leecode402:移掉 K 位数字

这道题一看想的是可能用回溯或者什么别的方法&#xff0c;但是那样的话时间复杂度非常高&#xff0c;而且也不适用于动态规划&#xff0c;所以观察的话&#xff0c;可以知道从前往后判断的话肯定是前面越小越好&#xff0c;所以只需要前面最小&#xff0c;整体就最小。因此从前…

子网掩码详解

1 子网掩码 IP地址是以网络号和主机号来标示网络上的主机的&#xff0c;我们把网络号相同的主机称之为本地网络&#xff0c;网络号不相同的主机称之为远程网络主机&#xff0c;本地网络中的主机可以直接相互通信&#xff1b;远程网络中的主机要相互通信必须通过本地网关&#…