C++代码:
if(s.size()==0)
{
return "";
}
else if(s.size()==1)
{
return s;
}
else
{
vector<string>str;
int i,j,num,len=0;
vector<char>ch1;
string s1,s2;
for(i=0;i<s.size();i++)
{
for(j=0;j<ch1.size();j++)
{
if(s[i]==ch1[j])
{
for(num=j;num<=i;num++)
{
s2=s[num];
s1.append(s2);
}
str.push_back(s1);
s1="";
}
}
ch1.push_back(s[i]);
}
if(str.size()==0)
{
s1=s[0];
return s1;
}
else
{
for(i=0;i<str.size();i++)
{
if(str[i].size()%2==0)
{
for(j=0;j<str[i].size()/2;j++)
{
if(str[i][j]!=str[i][str[i].size()-1-j])
{
str.erase(str.begin()+i);
i--;
break;
}
}
continue;
}
if(str[i].size()%2==1)
{
for(j=0;j<(str[i].size()-1)/2;j++)
{
if(str[i][j]!=str[i][str[i].size()-1-j])
{
str.erase(str.begin()+i);
i--;
break;
}
}
continue;
}
}
}
if(str.size()==0)
{
s1=s[0];
return s1;
}
for(i=0;i<str.size();i++)
{
if(str[i].size()>len)
{
len=str[i].size();
num=i;
}
}
return str[num];
}
暴力法超时,,,
学习之后,用了中心扩展法
if(s.size()<=1)
{
return s;
}
int start=0,end=0;
for(int i=0;i<s.length();i++)
{
int len1=panduan(s,i,i);
int len2=panduan(s,i,i+1);
int len=max(len1,len2);
if (len>end-start)
{
start=i-(len-1)/2;
end=i+len/2;
}
}
return s.substr(start,end-start+1);
}
int panduan(string s, int left, int right)
{
while (left>=0&&right<s.length()&&s[left]==s[right])
{
left--;
right++;
}
return right-left-1;
}