给一个字符串,求重复出现且最长的子字符串
例如”ababc",要求返回"ab"。因为"ab”连续重复出现且最长。用C/C++语言写一个函数完成该算法
1 void GetSub(char* str)
2
3 {
4
5 char *p,*q,*temp;
6
7 p = str;
8
9 q = p + 1;
10
11 int len = 0;//记录连续重复子串的长度
12
13 int max = 0;//记录连续重复子串的最大长度
14
15 char data[100];//临时数组,用于保存最长重复子串
16
17
18
19 while(*p != '\0')
20
21 {
22
23 temp = p;
24
25 while(*q != '\0')
26
27 {
28
29 if(*q != *p)
30
31 q++;
32
33 else
34
35 {
36
37 len++;//长度自加
38
39 p++;//指针后移
40
41 q++;
42
43 }
44
45 }
46
47 if(len > max)
48
49 {
50
51 i = 0;
52
53 max = len;
54
55 len = 0;
56
57 while(temp != p)
58
59 {
60
61 data[i] = *temp;
62
63 temp++;
64
65 i++;
66
67 }
68
69 }
70
71 p++;
72
73 q = p + 1;
74
75 }
76
77 data[i] = '\0';//字符数组的最后一个元素需要设置为'\0'
78
79 }</span>