最长回文子串——Manacher 算法

xiaoxiao2025-08-13  32

看了好多文章终于看明白了“马拉车算法”,具体内容转自:https://segmentfault.com/a/1190000003914228

 

本文对其进行了小修改,返回最长回文子串,以及字符串的长度(leetcode的第5题:https://leetcode-cn.com/problems/longest-palindromic-substring)

 

# coding:utf-8 class Solution(object): def longestPalindrome(self, s): """ :type s: str :rtype: str """ pos = 0 maxright = 0 max_len = 0 s = "#" + "#".join(s) + "#" s_num = [0] * len(s) res ="" max_i = 0 for i in range(len(s)): if i < maxright: s_num[i] = min(s_num[2 * pos - i], maxright - i) else: s_num[i] = 1 while i - s_num[i] >= 0 and i + s_num[i] < len(s) and s[i - s_num[i]] == s[i + s_num[i]]: s_num[i] += 1 if i + s_num[i] -1 >maxright: maxright = i + s_num[i] -1 pos = i max_len = max(max_len,s_num[i] ) if max_len == s_num[i]: max_i = i max_len -=1 tem = s[max_i-max_len:max_i+max_len+1] for i in tem: if i!="#": res +=i return res,max_len

 

 

转载请注明原文地址: https://www.6miu.com/read-5034778.html

最新回复(0)