Leetcode 115 不同的子序列

题意理解:

        给你两个字符串 s 和 t ,统计并返回在 s 的 子序列 中 t 出现的个数,结果需要对 109 + 7 取模。

        

        即此题可以理解为:从s中删除元素去构造t,有多少种方法

        或者也可以理解为:s中按顺序取t,有多少个

        则一定有s和t的最长公共子序列为t, 那么s中有多少个这样的最长公共子序列呢。

        这里采用动态规划思路来解题,则首先要明确dp数组的含义。

解题思路:

        (1)定义dp数组

        dp[i][j]表示s的第i个元素前有多少个t的第j个元素前子串。

        (2)初始化

        dp[i][0]表示s的第i个元素前有多少个空串,dp[i][0]=1

        dp[0][j]表示空串里有多少个t的字串,dp[0][j]=0

        特别的dp[0][0]=1

        (3)递推公式

        当且仅当:        s[i-1]==t[j-1]时

                此时有两种情况:

                dp[i][j]=使用这个可以匹配的字符+不适用这个可以匹配的,尝试下一个可以匹配的字符

                          =dp[i-1][j-1](使用是s[i-1])+dp[i-1][j](不使用s[i-1],继续下一字符匹配)

        否则:      dp[i][j]=(不是使用该字符匹配)dp[i][j-1]

        (4)遍历顺序:总是从上到下,从左到右

        (5)返回

            dp[s.size][t.size]

1.动态规划解题

public int numDistinct(String s, String t) {int[][] dp=new int[s.length()+1][t.length()+1];for(int i=0;i<s.length();i++){Arrays.fill(dp[i],0);dp[i][0]=1;}for(int i=1;i<=s.length();i++){for(int j=1;j<=t.length();j++){if(s.charAt(i-1)==t.charAt(j-1)){dp[i][j]=dp[i-1][j-1]+dp[i-1][j];}else{dp[i][j]=dp[i-1][j];}}}return dp[s.length()][t.length()];}

2.分析

时间复杂度:O(n^2)

空间复杂度:O(n^2)

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

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

相关文章

LeetCode Python - 17.电话号码的字母组合

目录 题目答案运行结果 题目 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&#xff1a; 输入&#xff1a;digits…

Learn LaTeX 019 - LaTex Math Formula 数学行内与行间公式

在科学排版中输入数学公式一直是一件很有挑战的事情&#xff0c;这个视频讲到了行内公式和行间公式的处理方法&#xff0c;并给出具体的演示。 https://www.ixigua.com/7298100920137548288?id7307433236572373556&logTag04e35402d88b16212e72

山脉的个数/攀登者

题目描述 攀登者喜欢寻找各种地图&#xff0c;并且尝试攀登到最高的山峰。 地图表示为一维数组&#xff0c;数组的索引代表水平位置&#xff0c;数组的元素代表相对海拔高度。其中数组元素0代表地面。 例如&#xff1a;[0,1,2,4,3,1,0,0,1,2,3,1,2,1,0]&#xff0c;代表如下…

【教程】Kotlin语言学习笔记(三)——数据容器(持续更新)

写在前面&#xff1a; 如果文章对你有帮助&#xff0c;记得点赞关注加收藏一波&#xff0c;利于以后需要的时候复习&#xff0c;多谢支持&#xff01; 【Kotlin语言学习】系列文章 第一章 《认识Kotlin》 第二章 《数据类型》 第三章 《数据容器》 文章目录 【Kotlin语言学习】…

略谈新质生产力与数字经济、数据、数据要素

国家发展和改革委员会宏观经济杂志社中宏经济发展研究中心以研究报告的形式刊载了高泽龙的文章&#xff0c;“新质生产力与数字经济、数据、数据要素”&#xff0c;同时&#xff0c;这篇文章在中宏网首页头部重点位置给予推荐报道。 新质生产力与数字经济、数据、数据要素https…

TiDB in 2023, 一次简单的回顾丨PingCAP 唐刘

2023 年已经过去&#xff0c;TiDB 经过了一年的迭代&#xff0c;又往前进步了一点点&#xff0c;我们非常自豪的看到&#xff0c;TiDB 正在不断地帮助我们的客户成功&#xff0c;包括但不限于&#xff1a; ○ 首个云原生、分布式、全栈国产化银行核心业务系统投产上线丨TiDB …

第10集《佛说四十二章经》

请大家打开讲议第十一面&#xff0c;第十九章、假真并观。 前面一章念等本空&#xff0c;说明大乘佛法的修学&#xff0c;身口意应安住在非空非有的中道实相。本章对中道实相的修学&#xff0c;再做明确的说明。修中道实相观要有空观与假观的观照&#xff0c;从空观中远离有相…

【链表】-Lc146-实现LRU(双向循环链表)

写在前面 最近想复习一下数据结构与算法相关的内容&#xff0c;找一些题来做一做。如有更好思路&#xff0c;欢迎指正。 目录 写在前面一、场景描述二、具体步骤1.环境说明2.双向循环链表3.代码 写在后面 一、场景描述 运用你所掌握的数据结构&#xff0c;设计和实现一个 LRU (…

LabVIEW荧光显微镜下微管运动仿真系统开发

LabVIEW荧光显微镜下微管运动仿真系统开发 在生物医学研究中&#xff0c;对微管运动的观察和分析至关重要。介绍了一个基于LabVIEW的仿真系统&#xff0c;模拟荧光显微镜下微管的运动过程。该系统提供了一个高效、可靠的工具&#xff0c;用于研究微管与运动蛋白&#xff08;如…

【北邮鲁鹏老师计算机视觉课程笔记】10 Classification 分类

【北邮鲁鹏老师计算机视觉课程笔记】10 Classification 分类 1 图像识别的基本范式 检测问题&#xff1a;不仅要知道有没有&#xff0c;还要知道在哪里 分类是整图级标签&#xff0c;检测是区域级标签&#xff0c;分割是像素级标签 2 检测任务的应用 3 单实例识别与类别识别…

Ubuntu下Anaconda+PyCharm搭建PyTorch环境

这里主要介绍在condapytorch都正确安装的前提下&#xff0c;如何通过pycharm建立开发环境&#xff1b; Ubuntu下AnacondaPyCharm搭建PyTorch环境 系统环境&#xff1a;Ubuntu22.04 conda: conda 23.11.0 pycharm:如下 condapytorch的安装教程介绍&#xff0c;请点击这里&…

【Spring】定义过滤器Filter和拦截器Interceptor

# 定义过滤器 package com.holen.filter;import jakarta.servlet.Filter; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.ServletRequest; import jakarta.servlet.ServletResponse; import java.io.IOException;pub…