就。。头秃,但是很奇怪这个测试用例是什么,表示有点看不懂,两个字符串输出公共子串,为啥答案有两个子串呢
然后下面就是我懒得用函数懒得比较替换之后贼长的代码,有问题需要修改,但是我还没搞明白,先做个标记吧
#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; }