最长回文串

来源:互联网 发布:编程原本 pdf 下载 编辑:程序博客网 时间:2024/06/05 07:13

输入一个字符串,求出其中的最长回文字串,样例输入;

Confucicss say:Madam,I‘m Asam。

样例输出:Masam,I'm Asam。

 这个题首先要判断最长那个回文串的位置,并且与大小写无关,用到函数(toupper);然后输出后面的字符串。

#include <iostream> #include <string.h>#include <ctype.h>#include <algorithm>using namespace std;#define MAX 5000+10char hk[MAX], ls[MAX];int l[MAX];int main(){ int a,b=0,max=0; int j,i,k,X,Y; fgets(hk,sizeof(ls),stdin);//字符转到控制台 for(a=0;a<strlen(hk);a++)  if(isalpha(hk[a]))//判断第一个字符是不是字母  {   l[b]=a;   ls[b++]=toupper(hk[a]);//转到大写字母  }  for(i=0;i<b;i++)   //先判断前面一部分   for(j=0;i-j>=0&&i+j<b;j++)   {     if(ls[i-j]!=ls[i+j]) break;      //if(ls[k]!=ls[i+j-k])     if(j*2+1>max)     {      max=j*2+1;      X=l[i-j];      Y=l[i+j];     }   }   for(j=0;i-j>=0&&i-j+1<b;j++)//判断整个字符串   {     if(ls[i-j]!=ls[i-j+1]) break;      //if(ls[k]!=ls[i+j-k])     if(j*2+2>max)     {      max=j*2+2;      X=l[i-j];      Y=l[i+j+1];     }   }   for(i=X;i<=Y;i++)   {  cout<<hk[i];    }   cout<<endl; return 0;}


 


开始没用toupper函数,用+-32。好像string也可以。

0 0
原创粉丝点击