A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


#include <stdio.h>
#include <string.h>
#include <assert.h>
// 找出两个字符串中最长的公共子串(如果存在多个 , 返回第一个)
// 参数:str1                  字符串1
//    str2                字符串2
//    maxSubStr    找到的最大子串
void findMaxSubstr(const char *str1 , const char *str2 , char *maxSubstr){
        assert((str1!=NULL)&&(str2!=NULL));
        assert(maxSubstr!=NULL);

        int maxPos=-1;
        int maxLen=0;        //相同字符串的最大长度
       
        // 穷举
        for(unsigned int i=0; i<strlen(str1); i++)
        {
                for(unsigned int j=0; j<strlen(str2); j++)
                {
                        if(str1[i] == str2[j])        //发现相同的字母
                        {
                                // 继续比较后面的是否也相同
                                for(int k=1; (str1[i+k]==str2[j+k])&&(str1[i+k]!='\0'); k++)
                                        ;       
                                if(k>maxLen)        // 是否为目前最长字符串
                                {
                                        maxPos=i;        // 起始位置
                                        maxLen=k;        // 长度
                                }
                        }
                }
        }
       
        if(maxPos==-1)
        {
                maxSubstr[0]='\0';
        }
        else
        {
                memcpy(maxSubstr , str1+maxPos , maxLen);
                maxSubstr[maxLen]='\0';
        }
}

int main()
{       
        char substr[20];
        findMaxSubstr("dddabd123456abcdefeeeee" , "234dddabcdegeeee" , substr);       
        printf("%s\n",su

评分

参与人数 1黑马币 +8 收起 理由
hailiqh + 8 赞一个!

查看全部评分

1 个回复

倒序浏览
写的好!支持一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马