//DP_LongestCommonSubStringv2.cpp
/*
author: ayusofayush
follow: @Hitman47
topic : Longest Common Substring with substring printed.
tc: O(m*n) and space: O(n)
along with substring printing
*/
#include<bits/stdc++.h>
#define ll long long
#define fast ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
string LCS(string x,string y,int n,int m)
{
int dp[2][m+1];
memset(dp,0,sizeof dp);
int b,mxlen=0,end=0;
for(int i=1;i<=n;i++){
b = i&1;
for(int j=1;j<=m;j++)
{
if(x[i-1]==y[j-1])
{
dp[b][j] = dp[1-b][j-1]+1;
if(mxlen < dp[b][j])
{
mxlen = dp[b][j];
end = i;
}
}
}
}
return x.substr(end-mxlen,mxlen);
}
int main()
{
string x="AforApple",y="for";
int n = x.length(), m = y.length();
cout<<LCS(x,y,n,m);
return 0;
}
Ly9EUF9Mb25nZXN0Q29tbW9uU3ViU3RyaW5ndjIuY3BwCi8qCglhdXRob3I6IGF5dXNvZmF5dXNoCglmb2xsb3c6IEBIaXRtYW40NwoJdG9waWMgOiBMb25nZXN0IENvbW1vbiBTdWJzdHJpbmcgd2l0aCBzdWJzdHJpbmcgcHJpbnRlZC4KCXRjOiBPKG0qbikgYW5kIHNwYWNlOiBPKG4pCglhbG9uZyB3aXRoIHN1YnN0cmluZyBwcmludGluZwoqLwojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGZhc3QgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpO2Npbi50aWUoMCk7Y291dC50aWUoMCk7CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJpbmcgTENTKHN0cmluZyB4LHN0cmluZyB5LGludCBuLGludCBtKQp7CglpbnQgZHBbMl1bbSsxXTsKCW1lbXNldChkcCwwLHNpemVvZiBkcCk7CgoJaW50IGIsbXhsZW49MCxlbmQ9MDsKCWZvcihpbnQgaT0xO2k8PW47aSsrKXsKCQliID0gaSYxOwoJCWZvcihpbnQgaj0xO2o8PW07aisrKQoJCXsKCQkJaWYoeFtpLTFdPT15W2otMV0pCgkJCXsKCQkJCWRwW2JdW2pdID0gZHBbMS1iXVtqLTFdKzE7CgkJCQlpZihteGxlbiA8IGRwW2JdW2pdKQoJCQkJewoJCQkJCW14bGVuID0gZHBbYl1bal07CgkJCQkJZW5kID0gaTsKCQkJCX0KCQkJfQoJCX0KCX0KCXJldHVybiB4LnN1YnN0cihlbmQtbXhsZW4sbXhsZW4pOwp9CgppbnQgbWFpbigpCnsJCglzdHJpbmcgeD0iQWZvckFwcGxlIix5PSJmb3IiOwoJaW50IG4gPSB4Lmxlbmd0aCgpLCBtID0geS5sZW5ndGgoKTsKCWNvdXQ8PExDUyh4LHksbixtKTsJCgkKCXJldHVybiAwOwp9