天天看点

5、Longest Palindromic Substring(最长回文子字符串)

题目要求给定一个字符串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+]
           

继续阅读