代码随想录Day55——392.判断子序列 115.不同的子序列

392.判断子序列

给定字符串 st ,判断 s 是否为 t 的子序列。

字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace""abcde"的一个子序列,而"aec"不是)。

cpp 复制代码
class Solution {
public:
    bool isSubsequence(string s, string t) {
        vector<vector<int>> dp(s.size()+1,vector<int>(t.size()+1,0));
        for(int i = 1;i<=s.size();i++)
        {
            for(int j = 1;j<=t.size();j++)
            {
                if(s[i-1] == t[j-1]) dp[i][j] = dp[i-1][j-1]+1;
                else dp[i][j] = dp[i][j-1];
            }
        }
        if(dp[s.size()][t.size()] == s.size()) return true;
        else return false;
    }
};

115.不同的子序列

给你两个字符串 st ,统计并返回在 s子序列t 出现的个数,结果需要对 109 + 7 取模。

cpp 复制代码
class Solution {
public:
    int numDistinct(string s, string t) {
        vector<vector<uint64_t>> dp(s.size()+1,vector<uint64_t>(t.size()+1,0));
        for(int j = 1;j<t.size();j++) dp[0][j] = 0;
        for(int i = 0;i<s.size();i++) dp[i][0] = 1;
        for(int i = 1;i<=s.size();i++)
        {
            for(int j = 1;j<=t.size();j++)
            {
                if(s[i-1] == t[j-1]) dp[i][j] = dp[i-1][j-1] + dp[i-1][j];
                else dp[i][j] = dp[i-1][j];
            }
        }
        return dp[s.size()][t.size()];
    }
};
相关推荐
cpp_25012 分钟前
P1024 [NOIP 2001 提高组] 一元三次方程求解
数据结构·c++·算法·题解·二分答案·洛谷·csp
田梓燊7 小时前
力扣:23.合并 K 个升序链表
算法·leetcode·链表
re林檎7 小时前
算法札记——4.27
算法
数据牧羊人的成长笔记8 小时前
逻辑回归与Softmax回归
算法·回归·逻辑回归
郑州光合科技余经理8 小时前
同城O2O海外版二次开发实战:从支付网关到配送算法
开发语言·前端·后端·算法·架构·uni-app·php
d111111111d11 小时前
STM32-UART封装问题解析
笔记·stm32·单片机·嵌入式硬件·学习·算法
Jiangxl~12 小时前
IP数据云如何为不同行业提供精准IP查询与风险防控解决方案?
网络·网络协议·tcp/ip·算法·ai·ip·安全架构
李伟_Li慢慢13 小时前
wolfram详解山峦算法
前端·算法
counting money13 小时前
prim算法最小生成树(java)
算法
澈20713 小时前
C++面向对象:类与对象核心解析
c++·算法