直接抄的…自己写的有点问题…放在下面
class Solution {
public:
string longestPalindrome(string s)
{
int i,j,p=0,l=0,n=s.size();
for(i=0;i<n;i++)
{
for(j=1;j<=min(i,n-i);j++)
if(s[i-j]!=s[i+j])
break;
if(l<j)
{
l=j;
p=i;
}
}
l--;
int P=0,L=0;
for(i=0;i<n;i++)
{
for(j=0;j<=min(i,n-i);j++)
if(s[i-j]!=s[i+j+1])
break;
if(L<j)
{
L=j;
P=i;
}
}
L--;
if(2*l+1>2*L+2) return s.substr(p-l,2*l+1);
else return s.substr(P-L,2*L+2);
}
};
尝试暴力破解
class Solution {
public:
bool testFx1(string x, int len) {
//cout << "work" << x << len << endl;
for (int r = 0, j = len; r < j; ++r, --j) {
//cout << x[r] << "," << x[j] << endl;
if (x[r] != x[j]) {
//cout << x[r] << "," << x[j] << endl;
return false;
}
}
return true;
}
/*
string testFx2(string _In, int _Begin_Point, int _End_Point) {
string _Out;
while (_Begin_Point <= _End_Point) {
_Out.push_back(_In[_Begin_Point]);
_Begin_Point++;
//cout << _Out << endl;
}
return _Out;
}
*/
string longestPalindrome(string s) {
int size = s.size();
if (size < 2) return s;
int maxL = 1;
while (s[maxL - 1] == s[maxL] && maxL < size) maxL++;
string out = s.substr(0, maxL);
for (int r = 0; r < size + 1; ++r) {
for (int j = r + maxL; j < size; ++j) {
//cout << "Ready for test" << r << ":" << s[r] << s[j] << endl;
if (s[r] == s[j])
if (testFx1(s.substr(r,j+1), (j - r))) {
maxL = j - r + 1;
out = s.substr(r,j+1);
//cout << out << endl;
}
}
}
//cout << out.size() << endl;
if (out.front() != out.back()) out.pop_back();
return out;
}
};
问题出在重复尾缀…没有探明原因…
出错例如bbcccbbb等