给定一个字符串 s
,找到 s
中最长的回文子串。你可以假设 s
的最大长度为 1000。
示例 1:
输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd" 输出: "bb"
解法:本题和 647. 回文子串 思路一样
C
char* longestPalindrome(char* s)
{
int n=strlen(s);
int start=0;
int end=0;
for(int i=0;i<n-1;i++)
{
int left=i-1;
int right=i+1;
while(left>=0 && right<=n-1)
{
if(s[left]==s[right])
{
if(right-left>end-start)
{
start=left;
end=right;
}
left--;
right++;
}
else
{
break;
}
}
left=i;
right=i+1;
while(left>=0 && right<=n-1)
{
if(s[left]==s[right])
{
if(right-left>end-start)
{
start=left;
end=right;
}
left--;
right++;
}
else
{
break;
}
}
}
int length=end-start+1;
char* res=(char*)malloc(sizeof(char)*(length+1));
for(int i=0;i<length;i++)
{
res[i]=s[i+start];
}
res[length]='\0';
return res;
}
C++
class Solution {
public:
string longestPalindrome(string s)
{
int n=s.length();
string res=s.substr(0,1);
for(int i=0;i<n-1;i++)
{
int left=i-1;
int right=i+1;
while(left>=0 && right<=n-1)
{
if(s[left]==s[right])
{
if(right-left+1>res.length())
{
res=s.substr(left,right-left+1);
}
left--;
right++;
}
else
{
break;
}
}
left=i;
right=i+1;
while(left>=0 && right<=n-1)
{
if(s[left]==s[right])
{
if(right-left+1>res.length())
{
res=s.substr(left,right-left+1);
}
left--;
right++;
}
else
{
break;
}
}
}
return res;
}
};
python
class Solution:
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
n=len(s)
res=s[0:1]
for i in range(0,n-1):
left=i-1
right=i+1
while left>=0 and right<=n-1:
if s[left]==s[right]:
if right-left+1>len(res):
res=s[left:right+1]
left-=1
right+=1
else:
break
left=i
right=i+1
while left>=0 and right<=n-1:
if s[left]==s[right]:
if right-left+1>len(res):
res=s[left:right+1]
left-=1
right+=1
else:
break
return res