OneCompiler

lcs

78

#include<bits/stdc++.h>
using namespace std;
int main(){
string s1,s2;
cin>>s1>>s2;

int l1=s1.size();
int l2=s2.size();
int m[l1+1][l2+1];
for(int i=0;i<=l1;i++){
for(int j=0;j<=l2;j++){
if(i==0||j==0) m[i][j]=0;
else if(s1[i-1]==s2[j-1]) m[i][j]=m[i-1][j-1]+1;
else m[i][j]=max(m[i-1][j],m[i][j-1]);
}
}
for(int i=0;i<=l1;i++){
for(int j=0;j<=l2;j++){
cout<<m[i][j]<<" ";
}
cout<<endl;
}
int i=l1; int j=l2;
string lcs="";
while(i>0 && j>0){
if(s1[i-1]==s2[j-1]){
lcs=s1[i-1]+lcs;
i--;
j--;
}else{if (m[i-1][j]>=m[i][j-1])
i--;
else j--;
}
}
cout<<lcs;
return 0;
}