黑马程序员技术交流社区

标题: 关于求公共子字符串的问题简单实现 [打印本页]

作者: 扒皮大叔    时间: 2015-12-8 14:09
标题: 关于求公共子字符串的问题简单实现

#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
作者: hailiqh    时间: 2015-12-8 21:17
写的好!支持一下




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2