LeetCode: Distinct Subsequences [115]

LeetCode: Distinct Subsequences [115]

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

【称号】

Given a string S and a string T, count the number of distinct subsequences of T in S.

A subsequence of a string is a new string which is formed from the original string by deleting some (can be none) of the characters without disturbing the relative positions of the remaining characters. (ie, "ACE" is a subsequence of "ABCDE" while "AEC" is not).

Here is an example:
S = "rabbbit"T = "rabbit"

Return 3.

【题意】

    给定字符串S和T,通过删除S中的若干个字符能够得到T,则T称为S的子序列。问有多少种删法能够得到T


【思路】

    DP问题。
    定义A[i][j] (i>j)表示S[1…i]转化到T[1…j]的方式数(操作类型仅仅有一种。那就是从S中删除若干字符)。
    转换方程例如以下:
        假设S[i]==T[j], A[i][j]=A[i-1][j-1]+A[i-1][j];
        假设S[i]!=T[j], A[i][j]=A[i-1][j];
        
    初始化矩阵
        起始点A[0][0]=1;
        第一行A[0][i]=0;
        第一列A[i][j]=1;

【代码】

class Solution {
public:
    int numDistinct(string S, string T) {
        if(S.length()==0 || S.length()==0)return 0;
        if(S.length()<T.length())return 0;          //假设S==T,返回1, 觉得有1种转换方式
        
        vector<vector<int> >matrix(S.length()+1, vector<int>(T.length()+1, 0));
        //初始化matrix[0][0]
        matrix[0][0]=1;
        //初始化对角线
        for(int j=1; j<=T.length(); j++)
            matrix[0][j]=0;
        //初始化第一列
        for(int i=1; i<=S.length(); i++)
            matrix[i][0]=1;
            
        //考虑其它i>j的情况
        for(int i=1; i<=S.length(); i++){
            for(int j=1; j<=T.length(); j++){
                if(S[i-1]==T[j-1])matrix[i][j]=matrix[i-1][j-1]+matrix[i-1][j];
                else matrix[i][j]=matrix[i-1][j];
            }
        }
        return matrix[S.length()][T.length()];
    }
};

版权声明:本文博客原创文章。博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117649.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vue 路由嵌套_vue路由实现方式

    vue 路由嵌套_vue路由实现方式嵌套路由有时候在路由中,主要的部分是相同的,但是下面可能是不同的。比如访问首页,里面有新闻类的/home/news,还有信息类的/home/message。这时候就需要使用到嵌套路由。项目结构如下:

    2022年7月31日
    5
  • 什么是IT人力外包?什么情况下选用IT人力外包?

    什么是IT人力外包?什么情况下选用IT人力外包?什么是IT人力外包?什么情况下选用IT人力外包?在IT企业中,在工作中通常涉及的外包业务主要有三类形式,概括来说:(一)项目外包:有明确的项目目标、时间要求、产出交付标准,请有相关资质的乙方公司帮助完成,付费方式通常为按约定的项目阶段、达成的交付产出分期支付,最后在项目上线运行后可能还会留少量比例的尾款,确保项目上线后还能得到乙方的继续支持。(二)业务外包:对于一些例行、重复的工作,明…

    2022年5月19日
    42
  • tomcat路径怎么找_tomcat项目路径

    tomcat路径怎么找_tomcat项目路径Maven配置覆盖内嵌tomcat虚拟映射路径

    2022年4月21日
    60
  • jax-ws 生成soap_使用JAX-WS创建SOAP Web服务

    jax-ws 生成soap_使用JAX-WS创建SOAP Web服务本文中显示的Web服务已在此处实时部署。有多种创建Web服务的方法。在本文中,我们将使用JAX-WS创建基于SOAP的Web服务,该服务是XMLWebServices的JavaAPI,并将其部署在Tomcat下。要记住的重要一点是,可以使用JAX-WS构建SOAP和REST样式的Web服务。有一个常见的误解,即JAX-WS用于创建基于SOAP的Web服务,而JAX-R…

    2022年7月15日
    16
  • 步入正轨——以客户的视角审视软件交付

    步入正轨——以客户的视角审视软件交付

    2021年8月18日
    46
  • ELK-日志分析系统

    ELK-日志分析系统为什么要建立日志分析系统 当我们需要进行日志分析场景 直接在日志文件中 grep awk 就可以获得自己想要的信息 但在规模较大的场景中 此方法效率低下 面临问题包括日志量太大如何归档 文本搜索太慢怎么办 如何多维度查询 需要集中化的日志管理 所有服务器上的日志收集汇总 解决办法是建立集中式日志收集系统 将所有节点上的日志统一收集 管理 访问 一般大型系统是一个分布式部署的架构 不同的服务模块部署在不同的服务器上 问题出现时 大部分情况需要根据问题暴露的关键信息 定位到具体的服务器和服务模块 构

    2025年11月8日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号