求两个字符串的最大公共子串

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 void substr(char *s1, char *s2)
 5 {     
 6      /*    1.设长串开始位置 i, 最大匹配串开始 结束位置 maxStart, maxEnd*/                
 7     char *i = s1, *maxStart = s1, *maxEnd = s1;
 8     char *j = s2; /*  设短串*/
 9     
10     if(strlen(s1)<strlen(s2))/*    判断长串 短串, 更新指针*/
11     {
12         i = maxStart = maxStart = s2;
13         j = s1;       
14     }
15     
16     char *jt = j;  /*  保存短串开始位置*/
17     
18     /*     2.计算最大匹配串 */
19     for(; *i; i++)/*  长串*/
20     {      
21         for(j = jt; *j; j++)/*  短串*/
22         {
23             char *indexStart = i,*indexEnd = i;
24             char *q = j;
25 
26             while(*indexEnd == *q && *q)/*  一旦匹配, 长短串指针都后移*/   
27             {              
28                 indexEnd++;
29                 q++;            
30             }
31 
32             if(indexEnd-indexStart > maxEnd-maxStart)/* 更新最大匹配串指针*/
33             {
34                maxEnd = indexEnd;
35                maxStart = indexStart;
36             }       
37         }
38     }
39     /* 打印最大匹配串 */
40     while(maxEnd>maxStart)
41     {
42         printf("%c",*maxStart++);
43     }    
44 } 
45 
46 int main()
47 {
48     char str1[100] = "abcdfffaebceeeeyyyyy";
49     char str2[100] = "abcdfqbcabcmxxnn";
50     substr(str1, str2);
51     return 0;
52 }

声明:该文章系转载,转载该文章的目的在于更广泛的传递信息,并不代表本网站赞同其观点,文章内容仅供参考。

本站是一个个人学习和交流平台,网站上部分文章为网站管理员和网友从相关媒体转载而来,并不用于任何商业目的,内容为作者个人观点, 并不代表本网站赞同其观点和对其真实性负责。

我们已经尽可能的对作者和来源进行了通告,但是可能由于能力有限或疏忽,导致作者和来源有误,亦可能您并不期望您的作品在我们的网站上发布。我们为这些问题向您致歉,如果您在我站上发现此类问题,请及时联系我们,我们将根据您的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。