每天一道leetcode:115. 不同的子序列(动态规划困难)

news2024/11/24 3:18:09

今日份题目:

给你两个字符串 st ,统计并返回在 s子序列t 出现的个数。

题目数据保证答案符合 32 位带符号整数范围。

示例1

输入:s = "rabbbit", t = "rabbit"
输出:3
解释:
如下所示, 有 3 种可以从 s 中得到 "rabbit" 的方案。
rabbbit选前两个b
rabbbit选后两个b
rabbbit选两头的b

示例2

输入:s = "babgbag", t = "bag"
输出:5

提示

  • 1 <= s.length, t.length <= 1000

  • st 由英文字母组成

题目思路

这道题目的思路和之前的子序列的思路不太一样的地方在于,这道题用到的是当前位置到字符串最后位置的子问题,而之前的题是当前位置到开头位置的子问题。

状态转移方程:

当 s[i]=t[j] 时,dp [ i ] [ j ]由两部分组成:

如果 s[i]和 t[j]匹配,则考虑 t[j+1:] 作为 s[i+1:]的子序列,子序列数为 dp [ i+1 ] [ j+1 ];

如果 s[i] 不和 t[j] 匹配,则考虑 t[j:] 作为 s[i+1:]的子序列,子序列数为 dp [ i+1 ] [ j ]。

因此当 s[i]=t[j] 时,有 dp [ i ] [ j ] =dp [ i+1 ] [ j+1 ]+dp[ i+1 ] [ j ]。

当 s[i]≠t[j] 时,s[i]不能和 t[j]匹配,因此只考虑 t[j:]作为 s[i+1:] 的子序列,子序列数为 dp[i+1] [j]。

因此当 s[i]≠t[j] 时,有 dp [ i ] [ j ]=dp [ i+1 ] [ j ]。

得状态转移总方程:

这道题目好难,我也是有点晕,如果大家有疑问,欢迎评论区讨论哦!

代码

class Solution 
{
public:
    int numDistinct(string s, string t) 
    {
        //获取两个字符串的长度
        int n= s.length();
        int m= t.length();
        if (n<m) return 0;

        unsigned long long dp[2000][2000]={0};

        //初始化边界数值
        for(int i=0;i<=n;i++)//此时t[m->末尾]为空字符串,故对于任何字符串,空字符串都是其子序列,为1 
        {
            dp[i][m]=1;
        }

        //更新所有dp值
        for(int i=n-1;i>=0;i--) 
        {
            char sc=s[i];
            for(int j=m-1;j>=0;j--) 
            {
                char tc=t[j];
                if(sc==tc) 
                {
                    dp[i][j]=dp[i+1][j+1]+dp[i+1][j];
                } 
                else 
                {
                    dp[i][j]=dp[i+1][j];
                }
            }
        }
        return dp[0][0];
    }
};

提交结果

 欢迎大家在评论区讨论,如有不懂的代码部分,欢迎在评论区留言!

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

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

相关文章

ssm+vue基于java的健身房管理系统源码和论文PPT

ssmvue基于java的健身房管理系统源码和论文PPT015 开发工具&#xff1a;idea 数据库mysql5.7(mysql5.7最佳) 数据库链接工具&#xff1a;navcat,小海豚等 开发技术&#xff1a;java ssm tomcat8.5 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统…

(一)Unity开发Vision Pro介绍

1.介绍 1.1 介绍 VisionOS 可实现与现实世界无缝集成并与其他虚拟内容共存的 3D 多任务体验。这为个人生产力、生活方式和娱乐应用打开了一个充满新可能性的世界&#xff0c;并为开发人员打开了一个全新的市场。然而&#xff0c;它也带来了围绕多任务处理和与身体互动的新挑战…

运维监控学习笔记6

应用监控: 安装nginx的过程&#xff1a; yum install -y gcc gcc-c pcre-devel openssl-develcd /usr/local/src wget http://nginx.org/download/nginx-1.24.0.tar.gztar -zxvf nginx-1.22.1.tar.gzuseradd -s /sbin/nologin -M www./configure --prefix/usr/local/nginx-1.…

HCIP-OpenStack发放云主机

1、云中的概念 在云平台注册了一个账号&#xff0c;这个账号对于云平台来说&#xff0c;就是一个租户或者一个项目。 租户/项目&#xff08;tenant/project&#xff09;&#xff0c;是一个意思。主机聚合就是主机组的意思。 region&#xff08;区域&#xff09;&#xff0c;就…

发过来的pdf文件怎么编辑?了解一下这几种编辑方法

发过来的pdf文件怎么编辑&#xff1f;PDF适用于各种用途。但是&#xff0c;许多人可能需要对PDF文件进行编辑&#xff0c;以满足特定的需求和要求。例如&#xff0c;他们可能需要添加或删除某些元素&#xff0c;更改文本或图像&#xff0c;或者将PDF文件转换为其他格式。在这种…

实例037 没有标题栏可义改变大小的窗口

实例说明 隐藏Windows窗口的标题栏之后&#xff0c;窗口只剩下一个客户区域&#xff0c;有点像Panel控件在窗口中的样子&#xff0c;而这样的窗口通常是不能够改变大小的。因为屏蔽其标题栏之后&#xff0c;窗口默认将边框也去除了&#xff0c;本例将用特殊的方法建立一个没有…

Linux代理的设置与使用方法

在Linux平台上&#xff0c; 代理的设置使用方法更是让人头疼。本文将为你分享Linux上 代理的设置和使用方法&#xff0c;并提供一些实用的解决方案&#xff0c;方便实际操作。 我们先来了解一下常用的 代理软件 在Linux上&#xff0c;有许多 代理软件可供选择。以下是几种常用的…

【Elsevier旗下】1区SCI,5天见刊!稳定检索36年,大数据、人工智能、机器学习、语音、语言、会话、情绪识别等领域

近日国自然预计将在下周8月20日之前公布&#xff0c;想必申请过国自然基金作者都知道&#xff0c;需要有研究基础&#xff0c;说白了就是需要有文章支持。那么稿子写好了&#xff0c;选择一本靠谱优质期刊也是一门学问。 本期小编推荐2本Elsevier 旗下审稿快刊&#xff0c;各项…

Python实现SSA智能麻雀搜索算法优化循环神经网络分类模型(LSTM分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 麻雀搜索算法(Sparrow Search Algorithm, SSA)是一种新型的群智能优化算法&#xff0c;在2020年提出&a…

电商财务新时代:轻松自动对账,财务效率倍增

电商领域频繁的多平台财务对账常常令企业头痛不已。然而&#xff0c;随着轻易云数据集成平台的崭新解决方案&#xff0c;财务对账的痛点迎刃而解。本文通过引人入胜的实例&#xff0c;深入探讨电商财务对账的现状&#xff0c;突出轻易云数据集成平台在自动对账中的强大作用&…

微信小程序有哪几种变现途径?

纵观现在市面上的微信小程序&#xff0c;目前变现的途径主要有&#xff1a;广告变现、电商变现、游戏付费、服务付费等。 1.广告变现 广告变现是小游戏、工具类、资讯类小程序变现的主要方式。微信官方为游戏开发者提供的扶植政策&#xff0c;对于工具类、资讯类小程序&#…

自然语言处理实战项目15-四种文本纠错模型的对比与实践,解决大家写作问题

大家好,我是微学AI,进入给大家介绍一下自然语言处理实战项目15-四种文本纠错模型的对比与实践,解决大家写作问题。文本纠错模型是一个旨在解决大家写作问题的实践项目。它基于先进的自然语言处理技术,特别是文本纠错领域的模型和算法,能够帮助用户快速、准确地纠正文本中的…

最新 python 爱心代码?

python程序代码&#xff1a;heart.py from math import cos, pi import numpy as np import cv2 import os, globclass HeartSignal:def __init__(self, curve"heart", title"Love U", frame_num20, seed_points_num2000, seed_numNone, highlight_rate0.…

python——案例20:计算数字组合方式

案例20&#xff1a;计算数字组合方式 假设三个数字1、2、3任意排列&#xff0c;有几种组合方式&#xff0c;分别是什么&#xff1f; sum0 for a in range(1,4):for b in range(1,4):for c in range(1,4):if a!b and b!c and a!c:print(a,b,c)sum1print("答案为&#xff1a…

中小企业体育代言:探索费用策略与实际操作

随着体育市场的不断扩大和企业品牌的不断提升&#xff0c;中小型企业正逐渐将目光投向了体育明星代言&#xff0c;希望通过这一策略来提升品牌知名度、美誉度&#xff0c;进而吸引目标消费者的注意力并提升销售量。然而&#xff0c;中小型企业请体育明星代言的费用究竟是多少呢…

Python爬虫的应用场景与技术难点:如何提高数据抓取的效率与准确性

作为专业爬虫程序员&#xff0c;我们在数据抓取过程中常常面临效率低下和准确性不高的问题。但不用担心&#xff01;本文将与大家分享Python爬虫的应用场景与技术难点&#xff0c;并提供一些实际操作价值的解决方案。让我们一起来探索如何提高数据抓取的效率与准确性吧&#xf…

pytorch单机多卡后台运行

nohup sh ./train_chat.sh > train_chat20230814.log 2>1&参考资料 Pytorch单机多卡后台运行的解决办法

【产品设计】移动端表单设计

本文主要是根据项目的表单填写体验差被客户撤下线重新整改&#xff0c;而对此将表单进行了新的用户体验设计的一些构思。 一、现状 传统的PC端空间范围大&#xff0c;能够将表单的所有信息连同温馨提示语等平铺展示出来&#xff0c;但是一下子用户看到这么多内容会给用户带来压…

【Linux】创建普通用户以及Linux问题解决

创建普通用户 ❓可以看到我们现在是一个root用户&#xff0c;并不是一个普通用户&#xff0c;我们要如何创建普通用户呢&#xff1f; adduser 你的用户名passwd 你的用户名&#x1f525;注意这里passwd设置密码的时候&#xff0c;你输入密码电脑不会显示 删除普通用户 userd…

JpaUtils 工具类

JpaUtils 工具类 JpaUtils 封装了对 jpql &#xff0c; sql &#xff0c;存储过程等常用的操作方法&#xff0c;并结合前端列表的数据格式&#xff0c; 可以实现少量代码即完成一次查询&#xff0c;并且在业务发生修改时&#xff0c;相比 IDEV7 改动会更少。 JpaUtils …