1143. Longest Common Subsequence

Question

LeetCode Problem

Given two strings text1 and text2 , return the length of their longest common subsequence . If there is no common subsequence , return 0 .
A subsequence of a string is a new string generated from the original string with some characters (can be none) deleted without changing the relative order of the remaining characters.

Input: text1 = "abcde", text2 = "ace" Output: 3 Explanation: The longest common subsequence is "ace" and its length is 3.

Example 2:

Input: text1 = "abc", text2 = "abc" Output: 3 Explanation: The longest common subsequence is "abc" and its length is 3.

Example 3:

Input: text1 = "abc", text2 = "def" Output: 0 Explanation: There is no such common subsequence, so the result is 0.

Constraints:


Solutions

Use dynamic programming

int longestCommonSubsequence(string text1, string text2) {
	int m = static_cast<int>(text1.size());
	int n = static_cast<int>(text2.size());
	// dp[i][j] definition:
	// longest common subsequence length when text1 at length i and text2 at length j.
	// where i is from 0 to m, j is from 0 to n;
	// base case should initialized as 0 because when length is 0 (e.g. i = 0), there's no common subsequence.
	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] == text[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[m][n];
}