leetcode 115. 不同的子序列

2023.8.25

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

当字符串si-1和tj-1相同时,递推公式为:dpij = dpi-1j-1 + dpij-1; 不相同时,dpij = dpij-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 小时前
C++ 工厂模式:从入门到进阶,彻底掌握对象创建的艺术
开发语言·c++·算法
@insist1236 小时前
系统架构设计师-实时性评价、调度算法与内核架构选型
算法·架构·系统架构·软考·系统架构设计师·软件水平考试
一只齐刘海的猫12 小时前
【Leetcode】找到字符串中所有字母异位词
算法·leetcode·职场和发展
海清河晏11112 小时前
数据结构 | 八大排序
数据结构·算法·排序算法
liulilittle13 小时前
固定数组时间轮的槽过载优化:桶链表与批次执行
网络·数据结构·链表
IronMurphy13 小时前
【算法五十七】146. LRU 缓存
算法·缓存
Irissgwe13 小时前
数据结构-栈和队列
数据结构·c++·c·栈和队列
两片空白14 小时前
数据容器集合set/frozenset
数据结构
凌波粒14 小时前
LeetCode--108.将有序数组转换为二叉搜索树(二叉树)
算法·leetcode·职场和发展