【python程序员面试宝典|程序员算法宝典】

【python】求字符串里的最长回文子串?

2019-07-25  本文已影响0人  阿牛02

题目:回文字符串是指一个字符串从左到右与从右到左遍历得到的序列是相同的。

分析:采用字符旋转的方法。

code:

def reverse(listStrs):

    begin = 0

    end = len(listStrs) - 1

    while begin < end:

        temp = listStrs[begin]

        listStrs[begin] = listStrs[end]

        listStrs[end] = temp

        begin += 1

        end -= 1

    return ''.join(listStrs)

if __name__ == "__main__":

    strs = 'abcba'

    listStrs = list(strs)

    strs1 = reverse(listStrs)

    if strs == strs1:

        print(strs + "为回文字串")

    else:

        print(strs + "不为回文字串")

code:

def longestPalindrome(s):

    # 如果字符串为空或者长度为1,则直接返原字符串

    if len(s) == 1 or s is None:

        return s

    # 记录最长回文子串得长度

    maxlen = 0

    # 记录最长回文子串得内容

    result = ''

    # 从头开始遍历字符串s

    for i in range(len(s)):

        for j in range(maxlen, len(s) - i ):

            #从当前记录的最大回文子串的长度往后开始遍历查看,因为如果长度小于maxlen的话,

            # 即使是回文子串,也不是最长的,不可能作为结果输出

            for j in range(maxlen,len(s) - i):

                # 字符串切片操作

                str_ = s[i: i + j + 1]

                _rts = str_[::-1]

                # 判断是否是回文子串且最长

                if str_ == _rts and len(str_) > maxlen:

                    maxlen = len(str_)

                    result = str_

    return result

if __name__ == "__main__":

    s = "babad"

    print(longestPalindrome(s))

上一篇 下一篇

猜你喜欢

热点阅读