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

#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;
}