1143.最长公共子序列
题目链接 文章讲解 视频讲解

- dp[i][j]: 表示以text1以i-1为结尾text2以j-1为结尾的最长公共子序列为dp[i][j]
- 递推公式:如果text1[i-1] == text2[j-1] 那么dp[i][j] = dp[i-1][j-1] + 1;
如果不相同的话,那么dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
class Solution {
public:
int longestCommonSubsequence(string text1, string text2) {
vector<vector<int>> dp(text1.size() + 1, vector<int>(text2.size() + 1, 0));
for(int i = 1; i <= text1.size(); ++i) {
for(int j = 1; j <= text2.size(); ++j) {
if(text1[i-1] == text2[j-1]) dp[i][j] = dp[i-1][j - 1] + 1;
else dp[i][j] = max(dp[i][j-1], dp[i-1][j]);
}
}
return dp[text1.size()][text2.size()];
}
};
392.判断子序列
题目链接 文章讲解 视频讲解

class Solution {
public:
bool isSubsequence(string s, string t) {
if(s.size() > t.size()) return false;
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] = max(dp[i-1][j], dp[i][j-1]);
}
}
return dp[s.size()][t.size()] == s.size();
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?