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()];
    }
};
相关推荐
雍凉明月夜6 分钟前
深度学习之目标检测yolo算法Ⅱ(v4)
深度学习·算法·yolo·目标检测
FAFU_kyp39 分钟前
Rust 的 引用与借用
开发语言·算法·rust
执携39 分钟前
数据结构 -- 数组(Array)
数据结构
永远都不秃头的程序员(互关)40 分钟前
【K-Means深度探索(一)】数据炼金术第一步:从零手撕K-Means聚类算法
算法·kmeans·聚类
我想回家种地42 分钟前
算法期末复习
算法
洛豳枭薰1 小时前
List梳理
数据结构·windows·list
rgeshfgreh1 小时前
MPPI算法实战:运动规划新利器
算法
Xの哲學1 小时前
Linux epoll 深度剖析: 从设计哲学到底层实现
linux·服务器·网络·算法·边缘计算
星火开发设计1 小时前
C++ multiset 全面解析与实战指南
开发语言·数据结构·c++·学习·set·知识
小猪咪piggy1 小时前
【leetcode100】回溯
数据结构·算法