您的位置:首页 > 其它

leetcode 5. Longest Palindromic Substring

2016-02-26 00:28 267 查看
给一个字符串求最长公共字串。直接上o(n)的Manacher,方法网上很多讲的都挺详细,需要的自行百度吧

class Solution(object):
def pre(self,s):
lenS = len(s)
i = 0
res = []
while i < lenS:
res.append('#')
res.append(s[i])
i+=1
res.append('#')
return res
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
ss = self.pre(s)

lenS = len(ss)

p = [1 for i in range(lenS+1)]
id = 0
mx = 0
i = 0
while i < lenS:
if mx > i :
p[i] = min(p[id*2-i],p[id]+id-i)
else : p[i] = 1
while i - p[i] >= 0 and i+p[i] < lenS and ss[i+p[i]] == ss[i-p[i]]: p[i] += 1
if (p[i] + i > mx):
mx = p[i] + i
id = i
i += 1
ans = 0
i = 0
id = 0

while i < lenS:
if (ans < p[i]):
ans = p[i] - 1
id = i // 2
i += 1

id = id - ans // 2

return s[id:id+ans]

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: