最长子串 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 }
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 }

浙公网安备 33010602011771号