leetcode 115. 不同的子序列

2023.8.25

使用dp数组解决。 定义一个二维dp数组,dp[i][j]的含义为:字符串s(下标为i-1)中,子序列t(下标为j-1)出现的个数。

当字符串s[i-1]和t[j-1]相同时,递推公式为:dp[i][j] = dp[i-1][j-1] + dp[i][j-1]; 不相同时,dp[i][j] = dp[i][j-1];

初始化需要将第一行全初始化为1。 下面看代码:

cpp 复制代码
class Solution {
public:
    int numDistinct(string s, string t) {
        vector<vector<uint64_t>> dp(t.size()+1,vector<uint64_t>(s.size()+1,0));
        //初始化第一行
        for(int i=0; i<=s.size(); i++) dp[0][i] = 1;
        for(int i=1; i<=t.size(); i++)
        {
            for(int j=1; j<=s.size(); j++)
            {
                if(t[i-1] == s[j-1]) dp[i][j] = dp[i-1][j-1] + dp[i][j-1];
                else dp[i][j] = dp[i][j-1];
            }
        }
        return dp[t.size()][s.size()];
    }
};
相关推荐
每天要多喝水1 分钟前
动态规划Day32:最长公共子序列
算法·动态规划
骇城迷影3 分钟前
代码随想录:栈和队列篇
java·服务器·算法
2401_858286115 分钟前
OS54.【Linux】System V 共享内存(3) “共享内存+管道“修bug记录
linux·运维·服务器·算法·bug
小付同学呀6 分钟前
C语言学习(二)——C语言数据类型
数据结构·算法
流云鹤8 分钟前
牛客周赛Round 131
算法
方便面不加香菜8 分钟前
数据结构--排序
数据结构
重生之后端学习11 分钟前
124. 二叉树中的最大路径和
java·数据结构·算法·职场和发展·深度优先·图论
mit6.82413 分钟前
状压+dijk |floyd
算法
Renhao-Wan15 分钟前
Java 算法实践(五):二叉树遍历与常见算法题
java·数据结构·算法
星火开发设计16 分钟前
序列式容器:list 双向链表的特性与用法
开发语言·前端·数据结构·数据库·c++·链表·list