diff --git a/Cpp/Longest Common Subsequence/problem.md b/Cpp/Longest Common Subsequence/problem.md new file mode 100644 index 0000000..7b7ae75 --- /dev/null +++ b/Cpp/Longest Common Subsequence/problem.md @@ -0,0 +1,30 @@ +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. + +For example, "ace" is a subsequence of "abcde". +A common subsequence of two strings is a subsequence that is common to both strings. + + + +Example 1: + +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: + +1 <= text1.length, text2.length <= 1000 +text1 and text2 consist of only lowercase English characters. \ No newline at end of file diff --git a/Cpp/Longest Common Subsequence/solution.cpp b/Cpp/Longest Common Subsequence/solution.cpp new file mode 100644 index 0000000..2e19927 --- /dev/null +++ b/Cpp/Longest Common Subsequence/solution.cpp @@ -0,0 +1,56 @@ +#include +#include +using namespace std; + +class Solution { +public: + int longestCommonSubsequence(string text1, string text2) { + int m = text1.length(); + int n = text2.length(); + + // Creating table + int c[m+1][n+1]; + for(int i = 0; i <= m; i++) { + for(int j = 0; j <= n; j++) { + c[i][j] = 0; + } + } + + for(int i = 1; i <= m; i++) { + for(int j = 1; j <= n; j++) { + if (text1[i-1] == text2[j-1]) { + c[i][j] = c[i-1][j-1] + 1; + } + else if (c[i-1][j] >= c[i][j-1]) { + c[i][j] = c[i-1][j]; + } + else { + c[i][j] = c[i][j-1]; + } + } + } + + return c[m][n]; + } +}; + +int main() { + Solution solution; + + // Test Case 1 + string text1 = "abcde"; + string text2 = "ace"; + cout << "Test Case 1 Output: " << solution.longestCommonSubsequence(text1, text2) << endl; + + // Test Case 2 + text1 = "abc"; + text2 = "abc"; + cout << "Test Case 2 Output: " << solution.longestCommonSubsequence(text1, text2) << endl; + + // Test Case 3 + text1 = "abc"; + text2 = "def"; + cout << "Test Case 3 Output: " << solution.longestCommonSubsequence(text1, text2) << endl; + + return 0; +}