关于回文字符串,网上好的算法太多了,其中有个M什么的算法比较好,复杂度比较低,自己贴一个垃圾算法,只是用我们的一般思想解决的,勉强可以看吧
回文串:就是从左到右或者从右到左都是一样的 比如 abcdcba,或者abccba 这就涉及到奇数偶数的问题了
在我的程序中,我借助了一个#字符,分开所有的字符如 abcgdh 变成a#b#c#g#d#h 只在中间加入,这样就解决了奇数偶数的问题了
程序中用mx来记录该位置最长的回文长度,然后取最大的保存在MAX中,废话不多说,直接看代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void search(char *pstr);
int main(int argc, char* argv[])
{
char pizstr[] = "dfrt333abcddcba333esdfsa";
search(pizstr);
system("pause");
return 0;
}
void search(char *pstr)
{
int mx=0;
int max=0,id;
int len = strlen(pstr);
char *str = (char *)malloc(sizeof (char) * (2*len - 1));
for(int index= 0;index != (2*len-2);++index) //这里是插入#到字符串中
{
if(index % 2 == 0)
str[index] = pstr[mx++];
else
str[index] = '#';
}
for(index = 0,mx=0;str[index];++index,mx=0) //主要步骤
{
for(;str[index + mx] == str[index - mx] && (index+mx<2*len-1 && index-mx>=0);mx++);
if(mx > max)
{
max = mx;
id = index;
}
}
for(index = id-max+1;index<id+max;++index) //这里是输出
if(str[index] == '#')
continue;
else
printf("%c ",str[index]);
free(str);
}
这样子无论奇数偶数就可以轻易解决,测试例子不言而喻了!