【刷题篇】动态规划(八)

文章目录

  • 1、分割回文串 IV
  • 2、分割回文串 II
  • 3、最长回文子序列
  • 4、让字符串成为回文串的最少插入次数
  • 5、最长公共子序列
  • 6、不相交的线

1、分割回文串 IV

给你一个字符串 s ,如果可以将它分割成三个 非空 回文子字符串,那么返回 true ,否则返回 false 。
当一个字符串正着读和反着读是一模一样的,就称其为 回文字符串 。
在这里插入图片描述

class Solution {
public:bool checkPartitioning(string s) {int n=s.size();vector<vector<bool>> dp(n,vector<bool>(n,false));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+1;j<n;j++){if(dp[0][i-1]&&dp[i][j-1]&&dp[j][n-1])return true;}}return false;}
};

2、分割回文串 II

给定一个字符串 s,请将 s 分割成一些子串,使每个子串都是回文串。
返回符合要求的 最少分割次数 。
在这里插入图片描述

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;}}vector<int> dp(n,INT_MAX);for(int i=0;i<n;i++){if(isPal[0][i]){dp[i]=0;}else{for(int j=1;j<=i;j++){if(isPal[j][i])dp[i]=min(dp[i],dp[j-1]+1);}}}return dp[n-1];}
};

3、最长回文子序列

给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。
子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。
在这里插入图片描述

class Solution {
public://s[i]==s[j]三种情况    i==j 1  i+1=j 2   i<j  dp[i+1][j-1]+2//s[i]!=s[j] max(dp[i][j-1],dp[i+1][j])int longestPalindromeSubseq(string s) {int n=s.size();vector<vector<int>> dp(n,vector<int>(n));//i<=j必须for(int i=n-1;i>=0;i--){dp[i][i]=1;//单拎出来,后面省点事i==jfor(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];}
};

4、让字符串成为回文串的最少插入次数

给你一个字符串 s ,每一次操作你都可以在字符串的任意位置插入任意字符。
请你返回让 s 成为回文串的 最少操作次数 。
「回文串」是正读和反读都相同的字符串。
在这里插入图片描述

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--){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];}
};

5、最长公共子序列

给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。
一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。
例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。
两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。
在这里插入图片描述

class Solution {
public:int longestCommonSubsequence(string text1, string text2) {int n=text1.size();int m=text2.size();vector<vector<int>> dp(n+1,vector<int>(m+1));text1=" "+text1;//引入空串会方便我们的初始化text2=" "+text2;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(text1[i]==text2[j])//空串方便了这里{dp[i][j]=dp[i-1][j-1]+1;//这里会发生越界所以在创建数组时多创建了空间}else{dp[i][j]=max(dp[i-1][j],dp[i][j-1]);}}}return dp[n][m]; }
};

6、不相交的线

在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。
现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直线需要同时满足满足:
nums1[i] == nums2[j]
且绘制的直线不与任何其他连线(非水平线)相交。
请注意,连线即使在端点也不能相交:每个数字只能属于一条连线。
以这种方法绘制线条,并返回可以绘制的最大连线数。

在这里插入图片描述

class Solution {
public:int maxUncrossedLines(vector<int>& nums1, vector<int>& nums2) {int n=nums1.size();int m=nums2.size();vector<vector<int>> dp(n+1,vector<int>(m+1));for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(nums1[i-1]==nums2[j-1])//空串方便了这里{dp[i][j]=dp[i-1][j-1]+1;//这里会发生越界所以在创建数组时多创建了空间}else{dp[i][j]=max(dp[i-1][j],dp[i][j-1]);}}}return dp[n][m]; }
};

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

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

相关文章

浅述热点方向-具身智能

具身智能 1. 具身智能&#xff08;Embodied AI&#xff09;概述 人工智能、机器学习和计算机视觉的最新研究趋势催生了一个不断增长的研究领域&#xff0c;称为“具身智能”。Facebook 人工智能研究中心 (FAIR) 和英特尔实验室一直在引领嵌入式人工智能领域的新项目。“体现”…

2024阿里云服务器ECS实例全方位介绍_优缺点大全

阿里云服务器ECS英文全程Elastic Compute Service&#xff0c;云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务&#xff0c;阿里云提供多种云服务器ECS实例规格&#xff0c;如经济型e实例、通用算力型u1、ECS计算型c7、通用型g7、GPU实例等&#xff0c;阿里云服务器网aliyu…

安卓多用户管理之adb指令

前言 有一些与多用户相关的adb 指令可以更好地帮助我们了解和调试安卓多用户相关信息 一、多用户adb指令 查看用户列表   adb shell pm list users 查看用户信息&#xff1a; adb shell dumpsys user 创建新用户   adb shell pm create-user [–profileOf userId] [–mana…

常用服务器管理面板整理汇总

服务器管理面板是用于管理和控制服务器的软件&#xff0c;可以帮助管理员更轻松地进行服务器管理和维护。以下是几种常用的服务器管理面板&#xff1a; 1、宝塔面板【官网直达】 宝塔面板是一款服务器运维管理软件&#xff0c;支持Windows和Linux等操作系统&#xff0c;提供了…

three.js实现渐变墙效果(电子围栏)

three.js实现渐变墙效果&#xff08;电子围栏&#xff09; 图例 步骤 两个平面几何体&#xff0c;添加纹理贴图平移纹理贴图 代码 <template><div class"app"><div ref"canvesRef" class"canvas-wrap"></div></d…

面试 React 框架八股文十问十答第四期

面试 React 框架八股文十问十答第四期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01;关注专栏后就能收到持续更新&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;哪些方法会触发 React…

史上最全的Nmap应用案例集合100个命令

1.Nmap规格说明 控制参数应用举例含义描述nmap 192.168.1.1扫描 单个IPnmap 192.168.1.1 192.168.2.1扫描多个IPnmap 192.168.1.1-254扫描一个IP段nmap scanme.nmap.org扫描一个域名nmap 192.168.1.0/24使用CIDR表示法进行扫描-iLnmap -iL targets.txt从一个文件中加载目标扫描…

【uniapp】遇到的一些问题

一、小程序中textarea ios样式不生效的方法 默认有内边距&#xff0c;加个disable-default-padding"true" 二、uni-data-picker循环使用&#xff0c;一个改了全局的值 换成了uni自带的picker&#xff0c;下面括号里必须有默认值&#xff0c;为空字符串的时候&…

软件架构之事件驱动架构

一、定义 事件驱动的架构是围绕事件的发布、捕获、处理和存储&#xff08;或持久化&#xff09;而构建的集成模型。 某个应用或服务执行一项操作或经历另一个应用或服务可能想知道的更改时&#xff0c;就会发布一个事件&#xff08;也就是对该操作或更改的记录&#xff09;&am…

STM32 使用 DS18B20 温度传感器实现环境温度监测

为了实现环境温度监测系统&#xff0c;我们可以利用STM32微控制器和DS18B20数字温度传感器。在本文中&#xff0c;我们将介绍如何通过STM32微控制器读取DS18B20传感器的温度数据&#xff0c;并展示一个简单的示例代码。 1. 系统概述 环境温度监测系统旨在使用DS18B20数字温度…

代码随想录第五十二天——最长递增子序列,最长连续递增序列,最长重复子数组

leetcode 300. 最长递增子序列 题目链接&#xff1a;最长递增子序列 dp数组及下标的含义 dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度递推公式 位置i的最长升序子序列等于j从0到i-1各个位置的最长升序子序列 1 的最大值 所以if (nums[i] > nums[j]) dp[i]…

认识Linux指令 “zip/unzip” 指令

01.zip/unzip指令 语法&#xff1a; zip 压缩文件.zip 目录或文件 功能&#xff1a; 将目录或文件压缩成zip格式 常用选项&#xff1a; -r 递归处理&#xff0c;将指定目录下的所有文件和子目录一并处理 举例 将test2目录压缩&#xff1a;zip test2.zip test2/* 解压到…

代码随想录算法训练营第二十七天|39. 组合总和、40.组合总和II、131.分割回文串

39. 组合总和 题目&#xff1a; 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个…

什么是预训练Pre-training—— AIGC必备知识点,您get了吗?

Look&#xff01;&#x1f440;我们的大模型商业化落地产品&#x1f4d6;更多AI资讯请&#x1f449;&#x1f3fe;关注Free三天集训营助教在线为您火热答疑&#x1f469;&#x1f3fc;‍&#x1f3eb; 随着人工智能(AI)不断重塑我们的世界&#xff0c;其发展的一个关键方面已经…

springboot医院信管系统源码和论文

随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&#xf…

浙大恩特客户资源管理系统 CrmBasicAction.entcrm任意文件上传

产品介绍 浙大恩特客户资源管理系统是一款针对企业客户资源管理的软件产品。该系统旨在帮助企业高效地管理和利用客户资源&#xff0c;提升销售和市场营销的效果。 漏洞描述 浙大恩特客户资源管理系统 fcrmbasicaction接口存在任意文件上传漏洞。攻击者可通过该漏洞在服务器…

PTA——闰年判断

输入一个年份&#xff0c;判断其是否为闰年&#xff0c;是闰年输出True&#xff0c;不是闰年输出False。 闰年的判断条件&#xff1a;年号能被4整除&#xff0c;但不能被100整除&#xff1b;或者能被400整除。 输入格式: 输入年号&#xff0c;如&#xff1a;2023。 输出格式…

机器学习笔记:时间序列异常检测

1 异常类型 1.1 异常值outlier 给定输入时间序列&#xff0c;异常值是时间戳值其中观测值与该时间序列的期望值不同。 1.2 波动点&#xff08;Change Point&#xff09; 给定输入时间序列&#xff0c;波动点是指在某个时间t&#xff0c;其状态在这个时间序列上表现出与t前后…

C语言——!(--x)和!(-x)以及while(!(--x)) 和 while(!(-x))

一、!(--x) 和 !(-x) 1. !(--x) 这个表达式表示先对变量 x 执行自减操作&#xff08;即 x 的值减去 1&#xff09;&#xff0c;然后对自减后得到的结果取逻辑非。 如果自减后的 x 等于 0&#xff0c;则逻辑非运算的结果为真&#xff08;值为 1&#xff09;&#xff1b;否则结果…

Java加密解密大全(MD5、RSA)

目录 一、MD5加密二、RSA加解密(公加私解&#xff0c;私加公解)三、RSA私钥加密四、RSA私钥加密PKCS1Padding模式 一、MD5加密 密文形式&#xff1a;5eb63bbbe01eeed093cb22bb8f5acdc3 import java.math.BigInteger; import java.security.MessageDigest; import java.security…