最长回文子串

def longestPalindrome(ss):
        if len(ss)==0:
            return None
        s=[]
        s.append('#')
        for k in ss:
            s.append(k)
            s.append('#')
           
        max_len=0
        start=0
        end=0
        for i in range(len(s)):
            low=i-1
            high=i+1
            while low>=0 and high<len(s):
                if s[low]==s[high]:
                    low-=1
                    high+=1
                else:
                    break
            if i-low>max_len:
                max_len=i-low
                start=low+1
                end=high
        return ''.join(s[start+1:end:2])#输出的时候去掉#字符

注解:该方法是从第一个元素开始遍历,每遍历到一个元素就开始左右各放置一个指针,分别进行判断是否左右对称位置字符相等,一开始加一个#号,这样无论对于abbc(回文串为bb),还是abcbd,或者是a(单个),这样的都能统一处理了。时间复杂度大概为O(n^2)

posted @ 2018-01-24 22:26  光彩照人  阅读(157)  评论(0编辑  收藏  举报