PhoenixZq
分享是一门艺术~~

题目:找出一个字符串中最长的回文,比如goooogleel,最长回文是goooog

分析:第一,定义一个pStr指向字符串str,再定义一个p指向pStr,q指向pStr+1;

第二,找出一个字符*p与其下一个字符*q相同位置,比如oo,num++,index = p;然后比较这两个相同字符*p,*q两边的字符是否相等,如果相等再向两边扩展p--,q++(p>str&&q!='\0')。如果p指向首部,即p=str,则调出while循环,再比较一次if(*p == *q),num++,index = q.

第三,如果发现连续两个字符不相等,则让pStr++,p=pStr,q =pStr+1.

第四,通过maxNum和maxIndex记录下最长回文的数目和位置。

#include <iostream>
using namespace std;

void GetLongestSymmetricalLength(char* str)
{
if(str==NULL)
return;

char* pStr = str;
char* p = pStr;
char* q = pStr+1;
int num=0;
int maxNum=0;;
char* index = pStr;
char* maxIndex = index;

while(*pStr != '\0')
{
while((*p != *q))
{
num
= 0;
pStr
++;
p
= pStr;
q
= pStr+1;
}
while((*p == *q)&&(p > str)&&(*q != '\0'))
{
num
++;
index
= p;
p
--;
q
++;
}
if((p == str)&&(*p == *q)&&(*q != '\0'))
{
num
++;
index
= p;
}

if(num > maxNum)
{
maxNum
= num;
maxIndex
= index;
}

pStr
++;
p
= pStr;
q
= pStr+1;
}
cout
<< "Result: " ;
for(int i=0;i<2*maxNum;++i)
cout
<< *maxIndex++ << " ";
cout
<< endl;
cout
<< "maxNum: " << maxNum << endl;
}

int main()
{
char* str = "abbacaacab";
GetLongestSymmetricalLength(str);

return 0;
}

  

posted on 2011-09-19 15:59  PhoenixZq  阅读(4140)  评论(0编辑  收藏  举报