def(item): return item[1] - item[0] classSolution: deflongestPalindrome(self, s): """ :type s: str :rtype: str """ if len(s) is0: return'' if len(s) is1: return s p = {} for i in range(len(s)): if s[i] in p.keys(): p[s[i]].append(i) else: p[s[i]] = [i] pairs = [] for i in p.values(): if len(i) > 1: for j in range(len(i)-1): for k in range(1,len(i)): pairs.append([i[j],i[k]]) if pairs == []: return s[0] # for i in range(20): # large = max(pairs,key=minus) # subs = s[large[0]:large[1]+1] # if subs == subs[::-1]: # return subs # pairs.remove(large) pairs.sort(key=minus, reverse = True) for i in pairs: subs = s[i[0]:i[1]+1] if subs == subs[::-1]: return subs return s[0]
classSolution: deflongestPalindrome(self, s): ''' :type s: str :rtype: str ''' if len(s)<=1: return s start,left,right=0,0,0# init while (start+int((right-left)/2)<len(s)): i,j=0,1# two pointer, i - repeat chars, j - palindrome step while (start+i<len(s)-1): # find the repeat chars amount start+i+1<=len(s)-1 if s[start]==s[start+i+1]: i+=1 else: break while(start-j>=0and start+i+j<len(s)): # find the number of palindrome step if s[start-j]==s[start+i+j]:j+=1 else: break if (right-left<i-1+2*j):left,right=start-j+1,start+j+i start=start+i+1 return s[left:right]
近期评论