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

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

 

上一篇:最大连续子序列 (HDU1223)(动态规划)


下一篇:c++学习例程(1)函数输入和指针