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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MVC Code First (代码优先)

    MVC Code First (代码优先)

    2022年1月13日
    46
  • http 415 错误

    http 415 错误惯例:我是温浩然:http错误,415,以前没有遇到过,遇到的都是404,500什么的,今天遇到了415错误,找了其他人的,发现说的也不明白。我这里说一下吧,发生415错误的原因。你想要请求一个方法,这个方法需要传map类型的参数(哪怕是空的呢),你什么都没有传入,就报错415.

    2022年6月11日
    36
  • .ziw文件是什么?如何打开.ziw文件?[通俗易懂]

    .ziw文件是什么?如何打开.ziw文件?[通俗易懂].ziw文件是为知笔记的一种文档格式打开方式:找到为知笔记的官网,下载它的windows安装包即可[缺点:该软件会有一个使用的有效期]打开.ziw文件时,右击选择发送到“为知笔记”,选择相应的文件夹保存即可…

    2022年10月12日
    0
  • 串行通信(USART/UART)「建议收藏」

    串行通信(USART/UART)「建议收藏」USART支持同步模式,因此USART需要同步始终信号USART_CK(如STM32单片机),通常情况同步信号很少使用,因此一般的单片机UART和USART使用方式是一样的,都使用异步模式。UART作为串口的一种,其工作原理也是将数据一位一位的进行传输,发送和接收各用一条线,因此通过UART接口与外界相连最少只需要三条线:TXD(发送)、RXD(接收)和GND(地线)**空闲位:**数据线在空闲状态的时候为逻辑“1”状态,也就是高电平,表示没有数据线空闲,没有数据传输。**起始位:**.

    2022年5月18日
    32
  • UML及UML建模工具介绍

    UML及UML建模工具介绍UML简介UnifiedModelingLanguage(UML)又称统一建模语言或标准建模语言,是始于1997年一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。面向对象的分析与设计(OOA&amp;D,OOAD)方法的发展在80年代末至90年代中出现了一个高潮,UML是这个高潮的产物。它不…

    2022年7月16日
    12
  • 服务器系统防盗,Windows系统中IIS防盗链设置详细介绍Windows服务器操作系统 -电脑资料…

    服务器系统防盗,Windows系统中IIS防盗链设置详细介绍Windows服务器操作系统 -电脑资料…在Windows系统中IIS防盗链设置需一个ISAPI_Rewrite组件,然后我们把ISAPI_Rewrite加载到iis中,再就可以在iis中的httpd.ini中写防盗链功能了,下面我来给各位同学介绍,首页我们安装一个组件:isapi.msi安装完后,对软件安装目录的IIS_WGP组的读写权限(重要,如果不设置安装完后你的网站就会直接ServiceUnavailable,无法访问)。假如你…

    2022年7月23日
    6

发表回复

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

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