5. Longest Palindromic Substring
Medium
3039296FavoriteShare
Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
Example 1:
Input: "babad" Output: "bab" Note: "aba" is also a valid answer.
Example 2:
Input: "cbbd" Output: "bb"
这道题我的思路是分别计算奇数回文偶数回文再作比较,先找中心,然后向两边扩展。提交的时候NG了几次,特殊的情况没有考虑到。加上就好了。
class Solution {
public:
string longestPalindrome(string s) {
if(s=="")return "";
if(s.length()==1)return s;
if((s.length()==2)&&(s[0]==s[1]))return s;
if((s.length()==2)&&(s[0]!=s[1]))return s.substr(0,1);
//分别计算奇数回文偶数回文再作比较
int al2=0;//temp总长度
int al22=0;//总长度
int al1=0;
int al11=0;
int start2=0;
int start1=0;
//先看偶数回文的情况
for(int i=0;i<s.length()-1;i++)
{
if(s[i]==s[i+1])
{
al2+=2;
int j=i;
int k=i+1;
while((j-1)>=0&&(k+1)<s.length())
{
j--;
k++;
if(s[j]==s[k])al2+=2;
else { j++; k--; break; }//这里需要注意,如果没加这句的话,j就跑偏了
}
if(al2>al22)
{
start2=j;
al22=al2;
}
al2=0;
}
}
//下面是奇数回文
for(int i=0;i<s.length()-2;i++)
{
if(s[i]==s[i+2])
{
al1+=3;
int j=i;
int k=i+2;
while((j-1)>=0&&(k+1)<s.length())
{
j--;
k++;
if(s[j]==s[k])al1+=2;
else { j++; k--; break; }
}
if(al1>al11)
{
start1=j;
al11=al1;
}
al1=0;
}
}
if(al11==0&&al22==0)return s.substr(0,1);
if(al11>=al22)return s.substr(start1,al11);
else return s.substr(start2,al22);
}
};