参考链接:http://taop.marchtea.com/01.05.html
#include <stdio.h>#include <stdlib.h>#include <string.h>/*给定一个字符串,求它的最长回文子串的长度,并打印出最长回文子串*/int main(){ char str[99]="test"; gets(str); int strLength=strlen(str); int maxStr=0; int tempMax=0; int startMax=0; for(int i=0;i<strLength;++i){ //字符串是奇数个 for(int j=0;i-j>=0&&j+i<strLength;++j){ if(str[i-j]!=str[i+j]) break; tempMax=j*2+1; } if(tempMax>maxStr){ startMax=i;//此时记录最大回文串的中间位置 maxStr=tempMax; } //字符串是偶数个 for(int j=0;i-j>=0&&i+j+1<strLength;++j){ if(str[i-j]!=str[i+j+1]) break; tempMax=j*2+2; } if(tempMax>maxStr){ startMax=i;//此时记录最大回文串的中间位置 maxStr=tempMax; } } PRintf("maxstr=%d/n",maxStr); if(maxStr%2==0){ startMax=startMax-maxStr/2+1;//此时记录最大回文串的起始位置,便于打印 for(int k=startMax;k<startMax+maxStr;++k){ printf("%c",str[k]); } } else{ startMax=startMax-maxStr/2;//此时记录最大回文串的起始位置 for(int k=startMax;k<startMax+maxStr;++k){ printf("%c",str[k]); } } return 0;}新闻热点
疑难解答