题目:找出一个字符串中最长的回文,比如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; }