(系统错误)leetcode#5最长回文数
一.思路
对每一个字符,检测它与它旁边的数是否为回文数,如果是,那么再扩展它 的长度检查,分奇偶情况讨论,得到以该字符为中心最长的回文数。在遍历过程中用max[2]储存该目前最长的回文数位置和长度。这样算法时间复杂度为O(n^2)。
二.实战
class Solution {
public:
string longestPalindrome(string s) {
int len=s.length(),check(1);
int max[2]={0,1};
if(len==1)
return s;
else{
int i(0);
while(i<len-1) //遍历s【i】并check
{
if(i==0)//s【0】
{
if(s[0]==s[1])
check=2;
else
check= 1;
++i;
}
else //s【0】到s【i-1】
{ int countodd(1);
int count(0);
int j(1);
if(i<len/2) //分别讨论两边,防溢出
{
while(i-j>=0)
{if(s[i-j]==s[i+j])
{ countodd+=2;
++j;
}
else
break;
}
j=1;
while(i-j>=0)
{if(s[i-j+1]==s[i+j])
{ count+=2;
++j;
}
else
break;
} if(count>countodd)
check= count;
else check= countodd;
if(max[1]<check)
{
max[0]=i;
max[1]=check;
}
}
else if(i>=len/2)
{
while(i+j<len)
{if(s[i-j]==s[i+j])
{ countodd+=2;
++j;
}
else
break;
}
j=1;
while(i+j<len)
{if(s[i+j-1]==s[i-j])
{ count+=2;
++j;
}
else
break;
}
if(count>countodd)
check= count;
else check= countodd;
if(max[1]<check)
{
max[0]=i;
max[1]=check;
}
}
++i;
}
}
i=0;//录入结果
int j(0),c(0);
i=max[0]-max[1]/2;
j=max[0]+max[1]/2;
int k(0);
char result[j-i+2];
if(max[1]%2!=0)
{ while(i<=j)
{
result[c]=s[i];
++c;
++i;
}
}
else
{
++i;
while(i<=j)
{
result[c]=s[i];
++c;
++i;
}
}
return result;
}
}
};
谜之错误