就。。头秃,但是很奇怪这个测试用例是什么,表示有点看不懂,两个字符串输出公共子串,为啥答案有两个子串呢
然后下面就是我懒得用函数懒得比较替换之后贼长的代码,有问题需要修改,但是我还没搞明白,先做个标记吧
#include<stdio.h>
#include<string.h>
char str1[1005],str2[1005];
int dp[1005][1005],max=0;
int main(){
while(scanf("%s %s",str1,str2)!=EOF){
memset(dp,0,sizeof(dp));
for(int i=0;i<strlen(str1);i++){
for(int j=0;j<strlen(str2);j++){
if(str1[i]==str2[j]){
if(i==0||j==0){
dp[i][j]=1;
}else{
dp[i][j]=dp[i-1][j-1]+1;
}
if(max<dp[i][j])
max=dp[i][j];
}
}
}
//i短j长取行第一
int index=-1;
if(strlen(str1)<strlen(str2)){
for(int i=0;i<strlen(str1);i++){
if(index!=-1){
break;
}
for(int j=0;j<strlen(str2);j++){
if(dp[i][j]==max){
index=i;
break;
}
}
}
index=index-max+1;
for(int i=index;i<index+max;i++){
printf("%c",str1[i]);
}
printf("\n");
}else{
for(int j=0;j<strlen(str2);j++){
if(index!=-1){
break;
}
for(int i=0;i<strlen(str1);i++){
if(dp[i][j]==max){
index=j;
break;
}
}
}
index=index-max+1;
for(int i=index;i<index+max;i++){
printf("%c",str2[i]);
}
printf("\n");
}
}
return 0;
} 
京公网安备 11010502036488号