题目要求给定一个字符串s,然后找出该字符串s中最长的回文子字符串,s的长度不超过1000。
比如,
example1:输入=”babad”,输出=“bab”。
example2:输入=“abbd”, 输出=“bb”。
这个题,我第一直觉就是用暴力求解,用两个索引,起始索引为i,i的最大值为len-maxlen,当剩余字符串长度小于过程中出现的最长回文的长度,则结束。然后就是,结束索引j从最后一个字符开始,当首尾索引对应字符相等时,判断中间字符串是否是回文,若是,则更新maxlen和对应的位置;否则跳过。代码如下所示:
@by_chandepire
bool isPalindrome(string s,int i,int j)
{
while(i < j)
if(s[i++]!=s[j--])
return false;
return true;
}
string longestPalindrome(string s)
{
int len = s.size(),j;
if(len <=) return s;
int begin_index,end_index;
int maxlen =;
for(int i;i<len-maxlen;++i)
{
j = len -;
while(i < j)
{
if(s[i]==s[j] && isPalindrome(s,i,j) && (j - i + > maxlen))
{
maxlen = j - i +;
begin_index = i;
end_index = j;
}
--j;
}
}
return s.substr(begin_index,end_index-begin_index);
}
python:
@by_chandepire
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
length = len(s)
if length<=:
return s
begin_index =
end_index =
maxlen =
for i in range(length):
j = length -
while i < j:
temp = s[i:j+]
if s[i]==s[j] and temp==temp[::-] and (j-i+)>maxlen:
maxlen = j - i +
begin_index = i
end_index = j
break
j = j -
if i >= length-maxlen:
break
return s[begin_index:end_index+]