題目:
給定兩個字串 text1
和 text2
,回傳兩個字串的最長公共子序列的長度。
範例:
Input: text1 = "abcde", text2 = "ace"
Output: 3
Explanation: 最長的公共子序列是 "ace",因此長度為 3。
Input: text1 = "abc", text2 = "abc"
Output: 3
Explanation: 最長的公共子序列是 "abc",因此長度為 3。
Input: text1 = "abc", text2 = "def"
Output: 0
Explanation: 兩個字串沒有共同的子序列,因此長度為 0。
限制條件:
text1
和 text2
由小寫英文字母組成實作:
class Solution {
public:
int longestCommonSubsequence(string text1, string text2) {
int m = text1.size();
int n = text2.size();
vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0));
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (text1[i - 1] == text2[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[m][n];
}
};
參考:
#1143. Longest Common Subsequence