最长回文字串

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

例:she say:madam,I’…/m adam…

输出:madam,I’…/m adam

不考虑空格跟非字母元素

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int huiwenString(char*p,int start,int end){
    int i=start,j=end;
    char s,e;
    while(i<j){
        if((((p[i]<='Z')&&(p[i]>='A'))||((p[i]<='z')&&(p[i]>='a')))&&(((p[j]<='Z')&&(p[j]>='A'))||((p[j]<='z')&&(p[j]>='a')))){
        s=(p[i]<='Z')&&(p[i]>='A')?p[i]+32:p[i];
        e=(p[j]<='Z')&&(p[i]>='A')?p[j]+32:p[j];
        if(s!=e){
            return 0;
        }
        i++;j--;
        }else if(((p[i]<='Z')&&(p[i]>='A'))||((p[i]<='z')&&(p[i]>='a')))j--;
        else if((((p[j]<='Z')&&(p[j]>='A'))||((p[j]<='z')&&(p[j]>='a'))))i++;
        else{i++;j--;}
    }
    return 1;
}
int main(void){
    char *str=NULL;
    char c;
    int k=0,len,i=0,j=0,flag=0,count=0;
    while(scanf("%c",&c)!=EOF){
        count++;
        str=(char*)realloc(str,count*sizeof(char));
        if(c!='\n'){
           str[count-1]=c;
        }
    }

    str[count-1]='\0';
        len=strlen(str);
        flag=0;
        for(k=len-1;k>=1;k--){
            for(i=0;i<len-k;i++){
                j=i+k;
                if(huiwenString(str,i,j)==1){
                    while(str[i]<'A'||(('Z'<=str[i])&&(str[i]<='a'))||str[i]>='z'){
                        i++;
                    }
                    while(str[j]<'A'||(('Z'<=str[j])&&(str[j]<='a'))||str[j]>='z'){
                        j--;
                    }
                    for(k=i;k<=j;k++){
                            printf("%c",str[k]);
                    }
                    flag=1;break;
                }
            }
            if(flag==1)break;
        }
return 0;
}

点赞