输出长度
#include<bits/stdc++.h>
using namespace std;
char a[10005],b[10005];
int f[10005][10005];
int main(){
int i,j,ans = -1;
int x;
scanf("%s %s",&a,&b);
for(i=1;i<=strlen(a);i++){
for(j=1;j<=strlen(b);j++){
if(a[i-1] == b[j-1]){
f[i][j] = f[i-1][j-1] + 1;
}
else
f[i][j] = 0;
if(ans < f[i][j]){
ans = f[i][j];
x = i;
}
}
}
cout<<ans<<endl;
return 0;
}
输出子串
#include<bits/stdc++.h>
using namespace std;
char a[10005],b[10005];
int f[10005][10005];
char ch[10005];
void print(int x,int len){
while(len != 0){
ch[len] = a[x-1];
x--;
len--;
}
for(int i=1;i<=len;i++) cout<<ch[i];
}
int main(){
int i,j,ans = -1;
int x;
scanf("%s %s",&a,&b);
for(i=1;i<=strlen(a);i++){
for(j=1;j<=strlen(b);j++){
if(a[i-1] == b[j-1]){
f[i][j] = f[i-1][j-1] + 1;
}
else
f[i][j] = 0;
if(ans < f[i][j]){
ans = f[i][j];
x = i;
}
}
}
cout<<ans<<endl;
print(x,ans);
for(int i=1;i<=ans;i++) cout<<ch[i];
return 0;
}