代码随想录算法训练营第四十二天| 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 @ 2023-08-02 11:25  博二爷  阅读(7)  评论(0编辑  收藏  举报