C++中实现最大回文子串
01.// huiwen.cpp : 定义控制台应用程序的入口点。
02.//
03.
04.#include "stdio.h"
05.#include "stdlib.h"
06.#include "iostream"
07.
08.using namespace std;
09.
10.bool isHuiwen(char * str);
11.bool isHuiwen2(char * ps, char * pn);
12.char * findBiggestHuiwen(char * str);
13.
14.
15.int main(int argc, char * argv[])
16.{
17. char str[] = "123456";
18.
19. cout《sizeof(str)《endl;
20. bool result = isHuiwen(str);
21. cout《str《":"《result《endl;
22.
23. char str2[] = "123456654321";
24. bool result2 = isHuiwen(str2);
25. cout《str2《":"《result2《endl;
26.
27. char str3[] = "123454321";
28. bool result3 = isHuiwen(str3);
29. cout《str3《":"《result3《endl;
30.
31. char str4[] = "abcde123321d";
32. char * p = findBiggestHuiwen(str4);
33. cout《str4《":"《p《endl;
34.
35. char str5[] = "123454321abcdefg";
36. char * p1 = findBiggestHuiwen(str5);
37. cout《str5《":"《p1《endl;
38.
39. system("pause");
40. return 0;
41.}
42.
43.char * findBiggestHuiwen(char * str)
44.{
45. char * presult;
46. char * ps = str;
47. char * pn = str;
48. while(*pn != '\0') pn++;
49. pn--;
50.
51. int max = 0;
52.
53. while(ps < pn)
54. {
55. // 判断以ps开始的每一个字符串
56. // 移动pn获取以ps开始的每个字符串
57. char * pend = pn;
58. while(pend > ps)
59. {
60. if(isHuiwen2(ps, pend))
61. {
62. int length = pend - ps + 1;
63. if(max < length)
64. {
65. max = length;
66. presult = ps;
67. }
68. }
69.
70. pend--;
71. }
72.
73. ps++;
74. }
75.
76. char * result = (char *)malloc(sizeof(char)*(max + 1));
77. for(int i = 0; i < max; i++)
78. result[i] = *presult++;
79. result[max] = '\0';
80. return result;
81.}
82.
83.bool isHuiwen2(char * ps, char * pn)
84.{
85. if(ps >= pn) return false;
86. while(ps <= pn)
87. {
88. if(*ps != *pn)
89. break;
90. else
91. {
92. ps++;
93. pn--;
94. }
95. }
96.
97. if(ps <= pn) return false;
98. else return true;
99.}
100.
101.
102.bool isHuiwen(char * str)
103.{
104. if(str == NULL) return false;
105. if(strlen(str) <= 1) return false;
106.
107. char * ps = str;
108. char * pn = str;
109. while(*pn != '\0')
110. pn++;
111. pn--;
112.
113. while(ps<=pn)
114. {
115. if(*ps != *pn)
116. break;
117. else
118. {
119. ps++;
120. pn--;
121. }
122. }
123.
124. if(ps<=pn) return false;
125. else return true;
126.}