思路:有两种情况,一种情况是回文串为abba,另一种情况是回文串为aba。让右指针与自己的下一位比较,如果相等,就是第一种情况,那么我们就将右指针往后移一位。如果不相等,我们再比较右指针与左指针,如果相等,左指针向前移动,右指针向后移动。
class Solution {
public:
string longestPalindrome(string s) {
if (s.size() < 2)
return s;
int left,right,maxlen = 0,maxleft=0;
for(int i=0;i<s.size()&&(s.size()-i>maxlen/2);)
{
left=right=i;
//如果右指针与它下一位相等,那么右指针往后移动。
while(right<s.size()-1&&s[right]==s[right+1])
++right;
i = right+1;
while(right<s.size()-1&& left > 0&&s[left-1]==s[right+1])
{
--left;
++right;
}
if(maxlen<right-left+1)
{
maxleft =left;
maxlen = right-left+1;
}
}
return s.substr(maxleft,maxlen);
}
};