///////////求出一个字符串的最大回文子字符串!
#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
int iii=i+2;
while(ii>=0&&iii
ii--;
iii++;
}
else{
break;
}
}
ii++;
iii--;
if(ii>=0&&iii
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);
具体思路如下:
首先 写一个判断一个字符串是不是回文的函数,这个函数主要是用来判断所要求的字符串整体本身是不是回文,如果是的话,那么他就是最大的回文字符串,那么就没有必要求下去了阿;
如果所要求的求的字符串本身不是回文字符串的话,那么我们需要从字符串的开头进行遍历,用一个指针指向起始地址,每指向一个字符 就判断 他前面的字符与后面的字符是不是相等,如果相等就说明有回文出现,此时我们还需要继续判断下去 ,分别从两端背道而驰,在指针指向有效的情况下,如果相等的话 继续走下去,直到不满足要求为止。用余外的变量回文的起始和结束地址 以及具体长度和当前的最大长度。如果求出的新回文当前长度大于目前最大长度那么就需要重新赋值。。。。。。。