给一个字符串,求重复出现且最长的子字符串

例如”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>

 

posted @ 2014-02-17 13:19  【Winco】  阅读(609)  评论(0编辑  收藏  举报