字符串DP问题

[dp]Search 字符串匹配问题 Problem D Search Time Limit: 1000ms, Memory Limit:64MB Description When we search for something on internet, we always use two characters “” and “?”. ”” represents 0 or more lowercase letters,”?” r 阅读详情

前言

最长回文数序列

二维DP数组解决

对于一些字符串问题,比如求一串字符中最长的回文串,或者是一些回文串的变种问题,我们一般可以使用一个二维的DP数组来保存计算的结果,从而减少计算量,下面我用两个例题来解释

例题1

例题的链接

例题2

516. Longest Palindromic Subsequence
给定一个字符串s,找出s中最长的回文子序列的长度。
子序列是一个序列,可以通过删除部分或不删除元素而从另一个序列派生,而不改变其余元素的顺序。

我们可以将一个字符串的任意字串用一个二维DP数组来表示,比如s[2,4]可以表示为DP[2][4]

所以我们这个问题可以用DP[2][4]表示字符串s的[2,4]字串中最长的回文串的长度

所以这个问题的state transition 方程为:
{ d p [ i ] [ j ] = d p [ i − 1 ] [ j + 1 ] + 2 s [ i ] = s [ j ] d p [ i ] [ j ] = m a x ( d p [ i − 1 ] [ j ] ,   d p [ i ] [ j + 1 ] ) s [ i ] ≠ s [ j ] \begin{cases} dp[i][j] = dp[i-1][j+1] + 2 & s[i] = s[j]\\ dp[i][j] = max(dp[i-1][j], \ dp[i][j+1]) & s[i] ≠s[j] \end{cases} {dp[i][j]=dp[i−1][j+1]+2dp[i][j]=max(dp[i−1][j], dp[i][j+1])​s[i]=s[j]s[i]​=s[j]​

Example 1:

Input: s = "bbbab"
Output: 4
Explanation: One possible longest palindromic subsequence is "bbbb".

Example 2:

Input: s = "cbbd"
Output: 2
Explanation: One possible longest palindromic subsequence is "bb".
class Solution {
public:
    int longestPalindromeSubseq(string s) {
        int lens = s.size();
        vector<vector<int>> dp(lens, vector<int>(lens, 0));
        for(int i=0; i<lens; i++){
            dp[i][i] = 1;
            for(int j=i-1; j>=0; j--){
                if(s[i] == s[j]){
                    dp[i][j] = dp[i-1][j+1] + 2;
                }else{
                    dp[i][j] = max(dp[i-1][j], dp[i][j+1]);
                }
            }
        }
        return dp[lens-1][0];
    }
};


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

最长公共子序列

这种问题跟最长回文序列一样,要用一个二维DP数组来解题
对于两个子序列,用一个二层嵌套for循环来遍历,若s1[i] == s2[j],则我们的公共子序列长度可以加一
如果s[i] != s[j],则我们比较{s1[:i-1], s[:j]}和{s1[:i], s[:j-1]},也就是dp[i][j-1]和dp[i-1][j],选择较大的一个作为dp[i][j]的值

例题1

原地tp

最长递增子序列

此类问题用一个一维DP数组即可解决,DP数组s[:i]表示序列前i个元素的最长递增子序列的长度

例题1

原地tp

最长扭动子序列

这题我也不咋会写。。。。。丢脸了

例题1

原地tp

Docker容器化部署Ceph集群:从零搭建高可用分布式存储 本文详细介绍了如何使用Docker容器化部署Ceph集群,从零搭建高可用分布式存储系统。通过环境一致性、快速扩容和资源隔离等优势,Docker显著提升了Ceph集群的部署效率和运维便捷性。文章涵盖硬件规划、镜像选择、单节点部署、多节点扩展及性能调优等实战内容,帮助开发者快速掌握分布式存储系统的容器化部署技巧。 阅读详情

相关推荐

2026年数据中心运行与管理专业人才培养基地建设方案(高职、数据中心运行与管理新专业、人才培养、专业代码:510310)

摘要: 为响应国家“东数西算”战略和数字经济需求,我校拟联合行业领军企业建设数据中心运行与管理人才培养基地。项目基于国家政策引导和产业快速发展背景,针对行业10万人才缺口,对标教育部新设专业标准(510310),分三阶段实施五年规划:专业奠基(2026-2028)、内涵深化(2028-2029)、辐射引领(2030-2031)。建设内容涵盖校企协同岗位能力分析、模块化课程开发(如网络管理、自动化运维等)、实训基地搭建及“课证融通”培养模式,重点培养基础设施、网络服务、运维托管三类岗位技能人才,目标建成区域性

啊碧根果的博客 1685

字符串DP总结

字符串DP题型复盘一、回文字符串多维度变形1.求字符串中最长回文`子序列`长度1.最长回文子序列---区间DP题目链接2.求字符串中最长回文`子串`长度1.最长回文子串---区间DP题目链接2.小A的回文串---区间DP题目链接3.无权值回文字符串最值问题1.Palindrome---LCS优化题目链接4、有权值回文字符串最值问题1.Cheapest Palindrome---区间dp题目链接5.合并回文子串1.合并回文子串---区间DP题目链接二、从原串中找子序列1.不同的子序列---DP题目链接2.Nu

ZZU_LGY 1528

trae使用playwright MCP方法流程

trae使用playwright MCP方法流程

MAILLIBIN的专栏 1677

字符串dp系列

647.回文子串 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。 示例1: 输入:"abc" 输出:3 解释:三个回文子串:"a","b","c". 示例2: 输入:"aaa" 输出:6 说明:6个回文子串:"a","a","a","aa","aa","aaa". 1.暴力,生成所有子串,一个个判断 2.dp[j][i]表示从j到i是否为回文串,如果s[j]=.

北歌的博客 1700

86 arduino 电机yl_(八)arduino入门:直流电机控制

一、本节介绍在本实验中,您将学习如何使用驱动芯片L293D和SunFounder Uno板控制小型直流(DC)电机的方向和速度。为了使初学者更容易,我们将让直流电机左右旋转,自动加速和减速。二、材料准备1 *小型直流电机1 * L293D1 * Arduino Uno板1 *面包板1 * USB数据线杜邦线三、原理讲解L293D这是一个非常实用的芯片,可以独立控制两台直流电机。在这个实验中,只有一...

weixin_29163857的博客 3568

【Leetcode】269.火星词典(Hard)

应用拓扑排序

明朗晨光的专栏 771

DP:回文串模型

有关回文子串的复杂问题,大多可以用dp去解决

weixin_51142926的博客 3807

电机驱动器MP6540H应用设计

/ ... 其他初始化函数(SystemClock_Config, MX_GPIO_Init, MX_TIM1_Init, MX_TIM2_Init)需要你根据STM32CubeMX生成或手动编写。// 假设霍尔传感器引脚是 GPIO_PIN_8, GPIO_PIN_9, GPIO_PIN_10。// 低侧U相GPIO引脚。

zhusl6688的博客 660

【动态规划】两个数组 / 字符串的dp问题(子序列、子数组问题、匹配问题、字符串问题)

两个数组或字符串的动态规划问题通常涉及到比较和匹配元素。最长公共子序列 (LCS) 问题问题描述给定两个字符串s1和s2,找出它们的最长公共子序列的长度。编辑距离问题问题描述给定两个字符串word1和word2,计算将word1转换为word2所需的最小操作次数(插入、删除、替换)。

卜及中的博客 1370

整车电检工艺流程

本文是笔者在从事汽车行业智能制造领域过程,对于整车电检工艺流程的理解与总结。

qq_40664711的博客 1万+

【WRFDA教程第四期】雷达数据同化(Radar Data Assimilation)

雷达数据同化(Radar Data Assimilation)

WW、forever的博客 1759

字符串DP

这几天在做DP,总结一下,先是字符串这一类的。   最简单的就是给你两个字符串a和b,让你求最长公共子序列(LCS)。用dp[i][j]作为第一个字符串匹配到i位置和第二个字符串匹配到j位置时的最长公共子序列,所以如果a[i]==b[j],dp[i][j]=dp[i-1][j-1]+1,否则dp[i][j]=max(dp[i-1][j],dp[i][j-1])。   之后一些题就和是这个的变形

1124

【架构】-- StarRocks 和 Doris 介绍与选型建议

查询性能 | ✅ 高性能,支持向量化执行和 CBO 优化器 | ✅ 高性能,优化的查询引擎 |- **实时性要求高**:如果业务对数据的实时性要求较高,建议选择 **StarRocks**,其在实时数据处理和低延迟查询方面表现优越。- **复杂查询需求**:对于需要处理复杂多表关联查询的场景,两者均可胜任,需根据具体性能测试结果进行选择。

欢迎来到我的博客,一起探索代码里的世界! 1832

经典套路:一类字符串计数的DP问题

概述 在各种比赛中经常会碰到这样一类问题: 给出一个(或多个)短串,问你能构造出多少个不同的长度为n的长串,不包含(或包含)这些短串。 这是一个常见的字符串计数问题,解决这类问题的思路是一致的。在这希望读者学会这篇博客后,碰到类似的问题(理解了解题的思想,再结合一点点想法)都能通过,或发现博客中不足以通过某题而产生新的衍生。 附上KMP板子: 无 附上AC自动机板子:(我好像trie拼错成tire了,但是用了两年的板子懒得改了) #include<bits/stdc++.h> using

Zimba_的博客 637

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

poj 3280 回文字符串问题 dp算法

题意:给一个字符串,构成回文(空也是回文) 其中增删都需要代价。问:代价最少? 思路:把字符串s变空 dp[i][j]表示变成回文的最小代价 for(i=m-1;i>=0;--i) for(j=i+1;i<w;j++)lsdjfl dp[i][j]=min(dp[i+1][j]+cost[s[i]-'a']],dp[i][j-1]...

99

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【dp】字符串比较问题

问题描述:  对于长度相同的2个字符串A和 B,其距离定义为相应位置字符距离之和。2 个非空格字符的  距离是它们的ASCII码之差的绝对值。空格与空格的距离为0;空格与其它字符的距离为一定  值k。  在一般情况下,字符串 A和B的长度不一定相同。字符串A的扩展

慢慢前行,跨越预言 689

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

字符串处理-DP问题

72.编辑距离 全文引用Labuladong 1.思路 前文「最长公共子序列」说过,解决两个字符串的动态规划问题,一般都是用两个指针 i,j 分别指向两个字符串的最后,然后一步步往前走,缩小问题的规模。 设两个字符串分别为 “rad” 和 “apple”,为了把 s1 变成 s2,算法会这样进行: 当i==j时,可以skip 当i!=j时,可以insert/replace/delete 还有一个很容易处理的情况: 就是 j 走完 s2 时,如果 i 还没走完 s1,那么只能用删除操作把 s1 缩 短为

ryontang的博客 657

[十二省联考2019]字符串问题 (SAM优化建图+DAG上DP)

题面见:https://www.luogu.com.cn/problem/P5284 题解 当年考的时候直接写了40暴力。。。 现在看了看,好像可以用后缀树优化建图 先倒着建一个SAM,然后再倍增定位每个区间 后缀树上的边就从父亲连向儿子,A连边向B 此时我们本来应该让B向其定位的区间连边的 但是一个点可能会对应多个区间,直接连边会出很多其他的问题 于是我们换一种思路,把定位在同一个点的区间按照长度排序,B排在A的前面 先从SAM上的点依次向这些点连边,遇到了B之后就再从B开始..

crosnken的博客 463

[DP题解] 最长回文字符串问题

[DP题解] 最长回文字符串问题 【问题】输入一个字符串,求出其中最长的回文子串。 子串的含义是:在原串中连续出现的字符串片段。回文的含义是:子串从左向右看和从右向左看是相同的,例如:abba,yyxyy。 在判断时忽略所有标点符号和空格,且忽略大小写,但是输出应保持原样。输入字符串的长度不超过5000,且占据单独一行。 应该输出最长的回文串。如果有多个,输出起始位置最靠左的一个。 [算法设计...

梅森上校的博客 业精于勤荒于嬉,形成于思毁于随。 666

回文字符串dp问题

1.Cheapest Palindrome(区间dp) 题目链接 d[i][j]:从i到j为回文串花费的最小 状态转移方程: if(s[i]==s[j]) d[i][j]=d[i+1][j-1] else d[i][j]=min(d[i][j-1]+add[s[j]],d[i+1][j]+add[s[i]],del[s[i]]+d[i+1][j],del[s[j]]+d[i][j-1]) #include <iostream> #include <cstring> #include

ZZU_LGY 218

南邮oj 1239 字符串比较问题 字符串dp,最优状态转移

题目 动态规划作业题3-17 对于长度相同的两个字符串A和B,距离定义为相应位置字符距离之和.两个非空格字符的距离是它们的ASCII码之差的绝对值.空格和空格的距离为0,空格与其他字符的距离为一定值k. 字符串的扩展是指在原字符串中插入若干空格字符所产生的字符串.给定两个字符串A和B,A和B的所有长度相同的扩展中的距离最小的扩展的距离称为扩展距离,求A和B的扩展距离. 输入包括两个字符串A...

秋叶红于二月花 559

【动态规划:两个数组的dp问题】两个字符串的最小ASCII删除和 && 最长重复子数组

本文解析了两道动态规划题目: 两个字符串的最小ASCII删除和:通过求两个字符串的最长公共子序列(ASCII值最大),用总ASCII值减去两倍的公共子序列值,得到最小删除和。状态转移方程分为字符相等和不相等两种情况,最终返回差值。 最长重复子数组:状态表示以两个数组当前位置结尾的最长公共子数组长度,仅当元素相等时更新状态(dp[i][j] = dp[i-1][j-1] + 1),遍历过程中记录最大值作为结果。 两题均通过动态规划表从左上到右下填表求解,时间效率为O(mn)。

lirendada的博客 1099

典型的dp问题(一个字符串是某个数的倍数的方案数量)

/典题//dp三件套定义,初始化,转移//前i位组成的数对13取模为j的方案数量int main()string s;cin >> s;i <= n;if(s[i]!

2301_80882026的博客 280

51nod 1092 回文字符串 dp问题

回文串是指aba、abba、cccbccc、aaaa这种左右对称的字符串。每个字符串都可以通过向中间添加一些字符,使之变为回文字符串。 例如:abbc 添加2个字符可以变为 acbbca,也可以添加3个变为 abbcbba。方案1只需要添加2个字符,是所有方案中添加字符数量最少的。 分析: 该题目有两种不同的思路,想到了就非常简单。 解法一: 这种解法相对

liuyanfeier的专栏 603

NOJ1682非递减字符串问题 简单dp

NOJ1682非递减字符串问题 简单dp

淘萄桃的博客 940

别再死记硬背DP公式了!以‘字符串删字符’问题为例,带你掌握动态规划的去重思维

本文以字符串删字符问题为例,深入解析动态规划(DP)的去重思维,帮助读者突破传统DP学习框架。通过分析重复字符导致的子序列重复问题,提出精准的状态设计和去重方案,并给出完整的DP解法及优化技巧,适用于各类子序列计数问题。

weixin_30300225的博客 450
上一篇: 每日一题 day 52 (DP topic)
下一篇: 每日一题 day 53 (DP topic)
NP_hard
博客等级 码龄7年 3709粉丝 177原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值