From 56e15d12ee8c65b168d34f92890216f630f0585c Mon Sep 17 00:00:00 2001 From: Aayushi Agarwal <65224590+aayushi02agarwal@users.noreply.github.com> Date: Thu, 5 Aug 2021 18:07:15 +0530 Subject: [PATCH] chore(CPlusPlus): adding longest common substring (#389) Co-authored-by: Your Name Co-authored-by: Ming Tsai <37890026+ming-tsai@users.noreply.github.com> --- .../longest-common-substring.cpp | 48 +++++++++++++++++++ algorithms/CPlusPlus/README.md | 4 +- 2 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 algorithms/CPlusPlus/Dynamic-Programming/longest-common-substring.cpp diff --git a/algorithms/CPlusPlus/Dynamic-Programming/longest-common-substring.cpp b/algorithms/CPlusPlus/Dynamic-Programming/longest-common-substring.cpp new file mode 100644 index 00000000..229cb1e1 --- /dev/null +++ b/algorithms/CPlusPlus/Dynamic-Programming/longest-common-substring.cpp @@ -0,0 +1,48 @@ +//Given two strings ‘s1’ and ‘s2’, find the length of the longest common substring. +//NOTE: A substring is a contiguous part of string. +// Input : X = “abcdxyz”, y = “xyzabcd” +// Output : 4 +// Explanation: The longest common substring is “abcd” and is of length 4. + +//Program using Dynamic Programming +//TIME COMPLEXITY: O(m*n) +#include +using namespace std; +int longestCommonSubstring(string s1,string s2,int n,int m) +{ + int ans=0; + int T[n+1][m+1]; + for(int i=0;i<=n;i++) + { + for(int j=0;j<=m;j++) + { + if(i==0 || j==0) // if length of any of the string is 0 then the length of longest common substring will be 0 + T[i][j]=0; + else + if(s1[i-1]==s2[j-1]) // if characters are equal, add 1 and update the answer according to maximum length + { + T[i][j]=1+T[i-1][j-1]; + ans=max(ans,T[i][j]); + } + else//if characters are not equal, make the current value in the array as 0 + T[i][j]=0; + } + } + return ans; +} +int main() +{ + string s1,s2; + cout<<"Enter 1st string: "<>s1; + cout<<"Enter 2nd string: "<>s2; + int n=s1.length(); + int m=s2.length(); + cout<<"Length of longest common substring: "<