最长子串 C实现

这方法太暴力,求更加简单的方法

 

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 #include <malloc.h>
 5 
 6 char *  maxSameString(char * a, char * b)
 7 {
 8     /*
 9     *maxlen记录当前最长子串长。
10     *markStart记录临时起点
11     *start,end记录已经找到的开始结束点
12     *same标志是不是有过相同的字符
13     */
14     unsigned int i,j,maxLen=0,markStart = 0,start=0,end=0,lenA,lenB,same=0;
15     char * c = (char *)malloc(strlen(a)*sizeof(char));
16     lenA = strlen(a);
17     lenB = strlen(b);
18 
19     for(i=0; i<lenA; i++)
20     {
21         markStart = i;
22         same=0;
23         for(j=0; j<lenB&&i<lenA; j++)
24         {
25             if(a[i]==b[j])
26             {
27                 i++;
28                 same=1;
29             }
30             else
31             {
32                 if(same==1 && i-markStart>maxLen)
33                 {
34                     start = markStart;
35                     end = i;
36                     maxLen = end-start;//
37                     i = markStart;
38                 }
39             }
40         }
41         i = markStart;//restart from markStart+1
42     }
43 
44     strncpy(c,a+start,maxLen);//从a的start位置开始复制长度是maxLen到C
45     c[maxLen] = '\0';//这里在最后加上一个结束标签
46     return c;
47 }
48 
49 
50 int main()
51 {
52     //char * a;
53     char a[] = "aabcdeflkdfla";
54     char b[] = "afaabcmfdslfa";
55     // char *d = b;
56     // printf("%c",*(d+3));
57     char *c =  maxSameString(a,b);
58 
59     printf("%s\t%d\n",c,strlen(c));
60     free(c);
61 
62     return 0;
63 }

 

posted @ 2012-10-12 21:14  zhengmian  阅读(572)  评论(0)    收藏  举报