Chinaunix首页 | 论坛 | 博客
  • 博客访问: 120111
  • 博文数量: 43
  • 博客积分: 2511
  • 博客等级: 少校
  • 技术积分: 420
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-25 12:28
文章分类

全部博文(43)

文章存档

2010年(15)

2009年(28)

我的朋友

分类: IT职场

2010-06-21 16:15:46

///////////求出一个字符串的最大回文子字符串!

#include
#include
#include
using namespace  std;
bool hui_wen(char *str){
    int len=strlen(str);
    int i=0;
    int j=len-1;
    while(i<=j){
      if(str[i]!=str[j]){
         return 0;
      }
        i++;
        j--;
    }
    return 1;
}
int  best_huiwen_str(char *str,int &begin,int &end){
     int len=strlen(str);
     int max=0;
     if(hui_wen(str)){
           begin=0;
           end=len-1;
           max=len;
           return max;
     }
     else{
         int i=1;
         for(;i            if(i-1>=0&&i+1                   int ii=i-2;
                   int iii=i+2;
                   while(ii>=0&&iii                        if(str[ii]==str[iii]){
                              ii--;
                              iii++;
                         }
                         else{
                                  break;
                         }
                   }
                   ii++;
                   iii--;
                   if(ii>=0&&iii                       int len=iii-ii+1;
                       if(len>max){
                               max=len;
                               begin=ii;
                               end=iii;
                         }
                    }
            }
           i++;
         }
       }
     return max;
}
int main( ){
   char  str[]="123456547890";
   int i,j,max;
   max=best_huiwen_str(str,i,j);
   cout<   return 0;
}

分析:看到一个关于此的解法 其效率是O(n^3); 好不容这个题让它达到了O(n^2);

 具体思路如下:

    首先 写一个判断一个字符串是不是回文的函数,这个函数主要是用来判断所要求的字符串整体本身是不是回文,如果是的话,那么他就是最大的回文字符串,那么就没有必要求下去了阿;

    如果所要求的求的字符串本身不是回文字符串的话,那么我们需要从字符串的开头进行遍历,用一个指针指向起始地址,每指向一个字符 就判断 他前面的字符与后面的字符是不是相等,如果相等就说明有回文出现,此时我们还需要继续判断下去 ,分别从两端背道而驰,在指针指向有效的情况下,如果相等的话 继续走下去,直到不满足要求为止。用余外的变量回文的起始和结束地址 以及具体长度和当前的最大长度。如果求出的新回文当前长度大于目前最大长度那么就需要重新赋值。。。。。。。

阅读(2945) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~