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

给你两个字符串 s和 t ,统计并返回在 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子序列的个数,可想到使用动态规划的方法,根据两个字符串的顺序不断向后匹配,当匹配的相同位置字符不相同时调用前面匹配成功的dpi-1j,当字符相同时dpij=dpi-1j-1+dpi-1j最后判断是否大于int范围,返回dplen1len2;

总结:

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

相关推荐
an12321215 小时前
ARM嵌入式学习笔记:SPI通信协议详解
arm开发·笔记·学习
不会就选b5 小时前
算法日常・每日刷题--<贪心>26
数据结构·算法
Because_of_Her17 小时前
dfs-洪水填充技巧
笔记·算法·深度优先·洪水填充
xzal128 小时前
GESP Python笔记
笔记·python·算法
周玉奎先生8 小时前
CGM系列水泥基灌浆料型号参数解析及安庆重点工程应用匹配
经验分享·笔记·零售
Logic1018 小时前
C语言/数据结构位运算题解:异或XOR找出书柜中编号只出现一次的那一层——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
海海不掉头发8 小时前
软件项目管理学习笔记-从软件危机到敏捷与DevOps
笔记·学习·devops
smj2302_796826529 小时前
解决leetcode第4064题至多一次取反能被k整除的最长子数组II
python·算法·leetcode
青山木9 小时前
Hot 100 --- 下一个排列
java·数据结构·算法·leetcode
垆边人似月.9 小时前
字符串重排后最大字典序
算法·leetcode·职场和发展