题解 | #查找两个字符串a,b中的最长公共子串#

查找两个字符串a,b中的最长公共子串

https://www.nowcoder.com/practice/181a1a71c7574266ad07f9739f791506

注意是较小串中首次出现的
附上较大串中首次出现和较小串首次出现的代码
#include <stdio.h>
#include <string.h>

void jiaohuan(char str1[],int length1,char str2[],int length2)
{
    char str[301];
    int i;
    for(i=0;i<length1;i++) str[i]=str1[i];
    for(i=0;i<length2;i++) str1[i]=str2[i];
    str1[i]='\0';
    for(i=0;i<length1;i++) str2[i]=str[i];
    str2[i]='\0';
}

/*int compare(char str1[],int length1,char str2[],int length2,int max)//长串中先出现的
{
    int i,j,jud;
    for(i=0;i<length1-max+1;i++)
    {
        if(max==length2)
        {
            for(j=0;j<length2;j++)
            {
                jud=1;
                for(int k=0;k<max;k++)
                    if(str1[i+k]!=str2[j+k]) {jud=0;break;}
                if(jud==1) 
                {
                    for(int k=0;k<max;k++) printf("%c",str2[i+k]);
                    return 1;
                }
            }
        }
        else
        {
            for(j=0;j<length2-max+1;j++)
            {
                jud=1;
                for(int k=0;k<max;k++)
                    if(str1[i+k]!=str2[j+k]) {jud=0;break;}
                if(jud==1) 
                {
                    for(int k=0;k<max;k++) printf("%c",str1[i+k]);
                    return 1;
                }
            }
        }
    }
    return 0;
}*/

int compare(char str1[],int length1,char str2[],int length2,int max)//短串中先出现
{
    int i,j,jud;
    for(i=0;i<length2-max+1;i++)
        for(j=0;j<length1-max+1;j++)
        {
            jud=1;
            for(int k=0;k<max;k++)
                if(str2[i+k]!=str1[j+k]) {jud=0;break;}
            if(jud==1) 
            {
                for(int k=0;k<max;k++) printf("%c",str2[i+k]);
                return 1;
            }
        }
    return 0;
}


int main()
{
    char str_sh[301],str_l[301];
    scanf("%s%s",str_sh,str_l);
    int length1,length2;
    length1=strlen(str_sh);
    length2=strlen(str_l);
    
    int max=length1;
    if(max>length2)
    {
        max=length2;
        jiaohuan(str_sh, length1, str_l, length2);
    }
    length1=strlen(str_sh);
    length2=strlen(str_l);
    
    while(max)
    {
        if(compare(str_l, length2, str_sh, length1, max)) break;
        max--;
    }
    return 0;
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务