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

392.判断子序列#

要求:#

判断第一个字符串是否是第二个字符串的子序列

思路1:#

设置成deque,如果长度为0则是

代码1:#

复制代码
 1 // 要求: 判断s 是否是t的子序列
 2 // 思路: 将s作为queue,如果头相等,那么就弹出,遍历后,查看是否为0
 3 //
 4 bool isSubsequence_simple(string s, string t) {
 5     deque<char> s_(s.begin(), s.end());
 6 
 7     for (int i = 0; i < t.size(); i++)
 8     {
 9         if (t[i] == s_.front())
10         {
11             s_.pop_front();
12         }
13     }
14 
15     return s_.empty();
16 }
复制代码

 

思路2:#

求这两个的最长公共子序列,如果长度==第一个字符串长度,则是

代码2:#

复制代码
 1 bool isSubsequence(string s, string t) {
 2     vector<vector<int>>dp(s.size() + 1, vector<int>(t.size() + 1, 0));
 3     int result = 0;
 4 
 5     for (int i = 1; i <= s.size(); i++)
 6     {
 7         for (int j = 1; j <= t.size(); j++)
 8         {
 9             if (s[i - 1] == t[j - 1])
10                 dp[i][j] = dp[i - 1][j - 1] + 1;
11             else
12                 dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
13 
14             result = result > dp[i][j] ? result : dp[i][j];
15         }
16     }
17 
18     return result == s.size();
19 }
复制代码

 115.不同的子序列 #

要求:#

在一个字符串中,找到另一个字符串作为子序列出现的次数

思路#

dp[n][m] n-1的字符串内,以m-1出现的次数

所以如果相等的话,可以直接在原有的基础上加过来,但是因为可以不考虑当前的i,所以之前也有相等的情况,所以需要加上旁边的

dp[n][m-1]

代码:#

复制代码
 1 // 要求:在s中t作为子序列出现的次数
 2 // dp[n][m] : 以 n-1 为结尾,m-1作为子序列出现的个数
 3 // 先对第一个字母进行初始化
 4 // dp[i][j] = dp[i-1][j-1]+dp[i-1][j]
 5 // else dp[i-1][j]
 6 // 
 7 //
 8 int numDistinct(string s, string t) {
 9     vector<vector<uint64_t>> dp(s.size() + 1, vector<uint64_t>(t.size() + 1, 0));
10 
11     for (int i = 0; i <= s.size(); i++) dp[i][0] = 1;
12 
13     for (int i = 1; i <= s.size(); i++)
14     {
15         for (int j = 1; j <= t.size(); j++)
16         {
17             if (s[i - 1] == t[j - 1])
18             {
19                 dp[i][j] = dp[i - 1][j] + dp[i-1][j - 1];
20             }
21             else
22             {
23                 dp[i][j] = dp[i - 1][j];
24             }
25         }
26     }
27 
28     return dp[s.size()][t.size()];
29 }
复制代码

 

posted @   博二爷  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
历史上的今天:
2022-08-02 r,r+,w,w+,a,a+的区别
点击右上角即可分享
微信分享提示
CONTENTS