Leecode 1143.最长公共子序列
题目地址:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
题目类型:最长子序列
双指针:
class Solution {
public:
bool isSubsequence(string s, string t) {
int i = 0, j = 0;
while (i < s.size() && j < t.size()) {
if (s[i] == t[j]) {
i++;
j++;
}
else {
j++;
}
}
if (i == s.size()) return true;
return false;
}
};
动态规划:
class Solution {
public:
bool isSubsequence(string s, string t) {
int m = s.size(), n = t.size();
// dp[i][j]代表
vector<vector<int>> dp(m + 1, vector<int>(n + 1));
for (int i = 1; i <= m; ++i) {
for (int j = 1; j <= n; ++j) {
if (s[i - 1] == t[j - 1]) dp[i][j] = dp[i - 1][j - 1] + 1;
// 由于要求s是连续的,所以不考虑dp[i - 1][j]的情况
else dp[i][j] = dp[i][j - 1];
}
}
return dp[m][n] == m ? true : false;
}
};