代码随想录算法训练营第55天 | 392.判断子序列, 115.不同的子序列

392.判断子序列

代码随想录链接

题目

LeetCode-392.判断子序列

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

题目分析

动态规划五部曲:

  • 确定dp数组及下标的含义

    dp[i][j]表示以下标i-1为结尾的s, 和以下标j-1为结尾的t, 相同子序列长度为dp[i][j].

  • 确定递推公式

    如果在t中一个字符在s中也出现了, 那么就要在dp[i-1][j-1]的基础上+1; 如果不匹配, 则继续沿用dp[i][j-1]的结果.

  • dp数组的初始化

    i==0和j==0的部分都要初始化为0.

  • 遍历顺序

    外层for循环遍历s的字符, 内层for循环遍历t的字符.

题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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.back().back() == s.size())
return true;
return false;
}
};

115.不同的子序列

代码随想录链接

题目

LeetCode-115.不同的子序列

给定一个字符串s和一个字符串t, 计算s的子序列中t出现的次数.

题目分析

动态规划五部曲:

  • 确定dp数组及下标的含义

    dp[i][j]:以i-1为结尾的s子序列中出现以j-1为结尾的t的个数为dp[i][j]

  • 确定递推公式

    1
    2
    3
    4
    5
    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];
    }
  • dp数组的初始化

    1
    2
    vector<vector<long long>> dp(s.size() + 1, vector<long long>(t.size() + 1));
    for (int i = 0; i <= s.size(); i++) dp[i][0] = 1;
  • 遍历顺序

    外层for循环遍历s的字符, 内层for循环遍历t的字符

题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 i = 0; i < s.size(); i++)
dp[i][0] = 1;
for (int j = 1; j < t.size(); j++)
dp[0][j] = 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] + dp[i - 1][j];
else
dp[i][j] = dp[i - 1][j];
return dp.back().back();
}
};

代码随想录算法训练营第55天 | 392.判断子序列, 115.不同的子序列

http://wwg.xyz/algorithm-train-day55/

作者

Giles

发布于

2023-04-10

更新于

2023-04-10

许可协议

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×