编程-最大回文字符串
代码
1 #include <stdio.h>
2 #include<string.h>
3 #define MAXLENGTH 100
4 /*
5 *str原始字符串 out返回最大回文字符串
6 */
7 void heiwenTest(char *str,char *out)
8 {
9 char *head;//字符串头指针,用于从尾部向前搜索
10 char *tail;//字符串尾指针,用于从头部向后搜索
11 char *last;//指向最后一个字符
12 if(1==strlen(str))
13 {
14 strcpy(out,str);
15 }
16 else
17 {
18 heiwenTest(str+1,out);
19 }
20
21 tail=str+strlen(str)-1;
22 last=tail;
23 head=str;
24
25 while(last>str)
26 {
27 while(head<tail && *head==*tail)
28 {
29 head++;
30 tail--;
31 }
32 if(head==tail)
33 {
34
35 if(strlen(out)<((head-str)*2+1))
36 {
37 for(int i=0;i<((head-str)*2+1);i++)
38 {
39 out[i]=*(str+i);
40 }
41 out[i]='\0';
42 }
43
44 }
45 if(head>tail)
46 {
47 if(strlen(out)<((head-str)*2))
48 {
49 for(int i=0;i<((head-str)*2);i++)
50 {
51 out[i]=*(str+i);
52 }
53 out[i]='\0';
54 }
55 }
56 last--;//搜索字符串减一
57 tail=last;
58 head=str;
59 }
60 }
61 /*
62 此函数返回最大回文字符串长度
63 int heiwenTest(char *str)
64 {
65 int max=0;
66 char *tail=str;
67 char *head;
68 char *last;
69 if(1==strlen(str))
70 {
71 return 1;
72 }
73 else
74 {
75 max=heiwenTest(str+1);
76 }
77 tail=str+strlen(str)-1;
78 last=tail;
79 head=str;
80
81 while(last>str)
82 {
83 while(head<tail && *head==*tail)
84 {
85 head++;
86 tail--;
87 }
88 if(head==tail)
89 {
90 max=max>((head-str)*2+1)?max:((head-str)*2+1);
91
92 }
93 if(head>tail)
94 {
95 max=max>((head-str)*2)?max:((head-str)*2);
96 }
97 last--;
98 tail=last;
99 head=str;
100 }
101 return max;
102 }
103 */
104 main()
105 {
106 char *p="abcdcba";
107 char out[MAXLENGTH];
108 for(int i=0;i<MAXLENGTH;i++)
109 {
110 out[i]='\0';
111 }
112 printf("原串:%s\n",p);
113 heiwenTest(p,out);
114 printf("最大回文子串:%s\n",out);
115 }
2 #include<string.h>
3 #define MAXLENGTH 100
4 /*
5 *str原始字符串 out返回最大回文字符串
6 */
7 void heiwenTest(char *str,char *out)
8 {
9 char *head;//字符串头指针,用于从尾部向前搜索
10 char *tail;//字符串尾指针,用于从头部向后搜索
11 char *last;//指向最后一个字符
12 if(1==strlen(str))
13 {
14 strcpy(out,str);
15 }
16 else
17 {
18 heiwenTest(str+1,out);
19 }
20
21 tail=str+strlen(str)-1;
22 last=tail;
23 head=str;
24
25 while(last>str)
26 {
27 while(head<tail && *head==*tail)
28 {
29 head++;
30 tail--;
31 }
32 if(head==tail)
33 {
34
35 if(strlen(out)<((head-str)*2+1))
36 {
37 for(int i=0;i<((head-str)*2+1);i++)
38 {
39 out[i]=*(str+i);
40 }
41 out[i]='\0';
42 }
43
44 }
45 if(head>tail)
46 {
47 if(strlen(out)<((head-str)*2))
48 {
49 for(int i=0;i<((head-str)*2);i++)
50 {
51 out[i]=*(str+i);
52 }
53 out[i]='\0';
54 }
55 }
56 last--;//搜索字符串减一
57 tail=last;
58 head=str;
59 }
60 }
61 /*
62 此函数返回最大回文字符串长度
63 int heiwenTest(char *str)
64 {
65 int max=0;
66 char *tail=str;
67 char *head;
68 char *last;
69 if(1==strlen(str))
70 {
71 return 1;
72 }
73 else
74 {
75 max=heiwenTest(str+1);
76 }
77 tail=str+strlen(str)-1;
78 last=tail;
79 head=str;
80
81 while(last>str)
82 {
83 while(head<tail && *head==*tail)
84 {
85 head++;
86 tail--;
87 }
88 if(head==tail)
89 {
90 max=max>((head-str)*2+1)?max:((head-str)*2+1);
91
92 }
93 if(head>tail)
94 {
95 max=max>((head-str)*2)?max:((head-str)*2);
96 }
97 last--;
98 tail=last;
99 head=str;
100 }
101 return max;
102 }
103 */
104 main()
105 {
106 char *p="abcdcba";
107 char out[MAXLENGTH];
108 for(int i=0;i<MAXLENGTH;i++)
109 {
110 out[i]='\0';
111 }
112 printf("原串:%s\n",p);
113 heiwenTest(p,out);
114 printf("最大回文子串:%s\n",out);
115 }