编程-最大回文字符串

代码
  1 #include <stdio.h> 
  2 #include<string.h>
  3 #define MAXLENGTH 100
  4 /*
  5  *str原始字符串 out返回最大回文字符串
  6  */
  7 void heiwenTest(char *str,char *out)
  8 {
  9     char *head;//字符串头指针,用于从尾部向前搜索
 10     char *tail;//字符串尾指针,用于从头部向后搜索    
 11     char *last;//指向最后一个字符
 12     if(1==strlen(str))
 13     {
 14         strcpy(out,str);
 15     }
 16     else
 17     {
 18         heiwenTest(str+1,out);
 19     }
 20 
 21     tail=str+strlen(str)-1;
 22     last=tail;
 23     head=str;
 24     
 25     while(last>str)
 26     {
 27         while(head<tail && *head==*tail)
 28         {
 29             head++;
 30             tail--;
 31         }
 32         if(head==tail)
 33         {
 34 
 35             if(strlen(out)<((head-str)*2+1))
 36             {
 37                 for(int i=0;i<((head-str)*2+1);i++)
 38                 {
 39                     out[i]=*(str+i);
 40                 }
 41                 out[i]='\0';
 42             }
 43 
 44         }
 45         if(head>tail)
 46         {
 47             if(strlen(out)<((head-str)*2))
 48             {
 49                 for(int i=0;i<((head-str)*2);i++)
 50                 {
 51                     out[i]=*(str+i);
 52                 }
 53                 out[i]='\0';
 54             }
 55         }
 56         last--;//搜索字符串减一
 57         tail=last;
 58         head=str;
 59     }
 60 }
 61 /*
 62 此函数返回最大回文字符串长度
 63 int heiwenTest(char *str)
 64 {
 65     int max=0;
 66     char *tail=str;
 67     char *head;
 68     char *last;
 69     if(1==strlen(str))
 70     {
 71         return 1;
 72     }
 73     else
 74     {
 75         max=heiwenTest(str+1);
 76     }
 77     tail=str+strlen(str)-1;
 78     last=tail;
 79     head=str;
 80     
 81     while(last>str)
 82     {
 83         while(head<tail && *head==*tail)
 84         {
 85             head++;
 86             tail--;
 87         }
 88         if(head==tail)
 89         {
 90             max=max>((head-str)*2+1)?max:((head-str)*2+1);
 91 
 92         }
 93         if(head>tail)
 94         {
 95             max=max>((head-str)*2)?max:((head-str)*2);
 96         }
 97         last--;
 98         tail=last;
 99         head=str;
100     }
101     return max;
102 }
103 */
104 main()
105 {
106       char *p="abcdcba";
107       char out[MAXLENGTH];
108       for(int i=0;i<MAXLENGTH;i++)
109       {
110           out[i]='\0';
111       }
112       printf("原串:%s\n",p);
113       heiwenTest(p,out);
114       printf("最大回文子串:%s\n",out);
115 }

 

posted @ 2010-06-01 00:41  tungli  阅读(722)  评论(0编辑  收藏  举报