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


相关推荐

  • windows打开远程连接_windows怎么开启远程服务

    windows打开远程连接_windows怎么开启远程服务1.打开dos命令界面使用“Ctrl+R”组合键快速打开cmd窗口,并输入“cmd”命令,打开cmd窗口。2.使用“mysql-uroot-proot”命令可以连接到本地的mysql服务。3.使用“usemysql”命令,选择要使用的数据库,修改远程连接的基本信息,保存在mysql数据库中,因此使用mysql数据库。4.修改前先确认数据库是否已开启远程连接设置:5.使用“GRANTALLPRIVILEGESON.TO‘root’@’%’IDENTIFIEDBY‘

    2022年10月9日
    2
  • 华为手机桌面时钟天气_华为手机怎么让屏幕显示天气和时钟

    华为手机桌面时钟天气_华为手机怎么让屏幕显示天气和时钟华为手机锁屏时钟软件是一款安卓手机桌面锁屏时钟工具,拥有多种锁屏时钟样式,软件使用界面精致简洁,锁屏也能够看时间,拥有多种时钟颜色可以选择,还可以添加各种提醒服务,到点即可提醒用户,使用方法简单,拥有多种显示模式,需要的伙伴,西西下载使用吧!华为手机锁屏时钟软件特色:锁屏时钟是一款功能齐全又实用的时钟显示软件,主界面是一个自带时间、日期、天气的LED数字时钟和模拟时钟,全屏显示翻页时钟,酷炫美观…

    2022年9月29日
    4
  • myeclipse 8.5注册码_激活码有效期

    myeclipse 8.5注册码_激活码有效期注册码如下:Subscriber:sojson.comSubscriberCode:fLR8ZC-855550-7550535783763475 步骤:MyEclipse—-&gt;SubscriptionInformation—-&gt;对应输入以上内容finish即可

    2022年9月29日
    2
  • linux efi shell,EFI Shell

    linux efi shell,EFI Shell1.2.ItaniumSystems—TheEFIShellBeforeyoustarttoinstallRedHatEnterpriseLinuxonanItanium,youmusthaveabasicunderstandingoftheEFIShell,whatitdoes,andtheinformationitcanpro…

    2022年7月24日
    11
  • bs架构和cs架构_cs bs区别

    bs架构和cs架构_cs bs区别C/S与B/S区别:Client/Server是建立在局域网的基础上的.Browser/Server是建立在广域网的基础上的.1.硬件环境不同:C/S一般建立在专用的网络上,小范围里的网络环境,局域网之间再通过专门服务器提供连接和数据交换服务.B/S建立在广域网之上的,不必是专门的网络硬件环境,例与电话上网,租用设备.信息自己管理.有比C/S更强的适应范围,一般只要有操作系统和浏览器就行2.对安全…

    2025年10月18日
    3
  • html表格基础及案例示图代码。[通俗易懂]

    html表格基础及案例示图代码。[通俗易懂]html的表格基础事例图片及代码

    2022年7月15日
    16

发表回复

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

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