题解 | #查找两个字符串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;
}

全部评论

相关推荐

02-02 20:25
门头沟学院 Java
数学转码崽:八股文也算是前人总结的精华,但是因为全是结果导向,你光背不去理解它背后的深层原理和这样做的原因,反而忽略了程序员最该重视的过程导向。推荐你不会的就去多问ai,比如我当时背的时候,concurrenthashmap底层原理常见八股网站都会讲,但是我不理解为什么它去用synchronize锁节点,为什么不用reentrantlock去锁节点。面试官问我你为什么觉得synchronize在这个场景下性能更好呢?虽然面试官可能也不确定清楚,但是你可以尝试给他解答,让他看见你的思考,这才是最重要的,毕竟你没实习,你的项目你也无法证明是你自己思考的产物,那就在别的地方体现你的能力
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务