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

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

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

#include <stdio.h>
#include <string.h>

void printMaxSubLen(char* s,int slen, char* l,int llen)
{
    char maxstr[300] = {0};
    int maxstrlen = 0;
    int beginidx = 0, endidx = 0;
    int samecount = 0;
    char oldeqflag = 0; //0 不相等 ; 1相等
    int findeqflag = 0;
    for(int i = 0; i < slen; i++)
    {
        beginidx = 0;
        samecount = 0;
        for(int j = 0; j < llen; j++)
        {
            beginidx = 0;
            samecount = 0;
            for(int k = j; k < llen; k++){
                if(s[i+samecount] == l[k])
                {
                    if(0 == findeqflag)
                    {
                        beginidx = i;
                        findeqflag = 1;
                    }
                    samecount++;
                }
                else //if(s[i+samecount] != l[k])
                {
                    if(1 == findeqflag)
                    {
                        findeqflag = 0;
                        //check & save
                        if(samecount > maxstrlen)
                        {
                            strncpy(maxstr, s + beginidx, samecount);
                            maxstrlen = samecount;
                        }
                    }
                    samecount = 0;
                    findeqflag = 0;
                }
            }
        }
    }
    //print
    for(int i = 0; i < maxstrlen; i++)
    {
        printf("%c",maxstr[i]);
    }
}

int main() {
    char s[308] = {0};
    int slen = 0;
    char l[308] = {0};
    int llen = 0;
    scanf("%s",s);
    slen = strlen(s);
    scanf("%s",l);
    llen = strlen(l);
    if(slen <= llen)
        printMaxSubLen(s,slen, l,llen);
    else
        printMaxSubLen(l,llen,s,slen);
    return 0;
}

全部评论
处理用循环程序结构处理遍历
点赞 回复 分享
发布于 03-16 10:17 广东

相关推荐

我在朝九晚六双休的联想等你:如果我是你,身体素质好我会去参军,然后走士兵计划考研211只需要200多分。
点赞 评论 收藏
分享
totoroyyw:千年老妖😂
投递华为等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务