leetcode做题笔记115. 不同的子序列

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

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

思路一:动态规划

cpp 复制代码
int numDistinct(char * s, char * t){
    int len1=strlen(s),len2=strlen(t);
    uint64_t dp[len1+1][len2+1];
    memset(dp,0,sizeof dp);
    for(int i=0;i<=len1;i++)
        dp[i][0]=1;
    
    for(int i=1;i<=len1;i++)
    {
        for(int j=1;j<=len2;j++)
      {     
            if(s[i-1]!=t[j-1])
                dp[i][j]=dp[i-1][j];
            else
                dp[i][j]=dp[i-1][j-1]+dp[i-1][j];
        }
    }
    if(dp[len1][len2]>INT_MAX)return -1;
    return dp[len1][len2];
}

分析:

本题要计算t在s子序列的个数,可想到使用动态规划的方法,根据两个字符串的顺序不断向后匹配,当匹配的相同位置字符不相同时调用前面匹配成功的dp[i-1][j],当字符相同时dp[i][j]=dp[i-1][j-1]+dp[i-1][j]最后判断是否大于int范围,返回dp[len1][len2];

总结:

本题考察动态规划在字符串之中的应用,考虑每一位匹配的结果调用前一位的结果即可解决

相关推荐
DDDiccc32 分钟前
JAVA题目笔记(二十)Stream流综合练习+方法引用
笔记
大筒木老辈子38 分钟前
Linux笔记---进程:进程状态
笔记
开心就好13145201 小时前
uniapp 开发微信小程序笔记
笔记·微信小程序·uni-app
cherry_rainyyy1 小时前
力扣整理版九:贪心算法(待整理)
算法·leetcode·贪心算法
澜世2 小时前
2024小迪安全基础入门第七课
网络·笔记·安全·网络安全
weixin_478689762 小时前
【二叉树】【2.1遍历二叉树】【刷题笔记】【灵神题单】
笔记
wzx_Eleven2 小时前
【课堂笔记】隐私计算实训营第四期:“隐语”可信隐私计算开源框架
笔记
醉颜凉3 小时前
计算(a+b)/c的值
java·c语言·数据结构·c++·算法
CQXXCL3 小时前
MySQL-学习笔记
笔记·学习·mysql
Lostgreen3 小时前
分布式查询处理优化之数据分片
大数据·笔记·分布式