# -*- coding: utf8 -*-
'''
__author__ = 'dabay.wang@gmail.com'
https://oj.leetcode.com/problems/longest-palindromic-substring/ Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000,
and there exists one unique longest palindromic substring. ===Comments by Dabay===
从最长的字符串开始判断,直到长度为2。但是这样的算法会超时Time Limit Exceeded。
使用一个著名的算法,叫Manacher's ALGORITHM:
每一个字符之间加上一个#来隔开,遍历的时候,从每个字符往两边延生,记录最长子串的长度。
这里加入#,避免了回文字符串是奇数或偶数的问题。
最后,在生成的记录长度的数组中,找到最大回文子串即可。 S # a # b # b # a # b # c # b # a #
P 1 2 1 2 5 2 1 4 1 2 1 6 1 2 1 2 1 mid记录包含最大右边界的回文子串的中心位置,max_right记录最大子串的右边界。 初始化位置0 对于每一个位置i
如果i不超过max_right:
判断基于mid对称点的回文长度是否超过边界
如果没有超过边界:
不用继续判断了,直接赋值为这个对称点的值,继续判断下一个i
如果超过边界:
在边界内的部分不用判断了(因为对称性,肯定是回文),继续寻找最长回文,记录长度
如果i超过了max_right:
寻找最长回文,记录长度 如果max_right得到了拓展,更新mid和max_right
'''
class Solution:
# @return a string
def longestPalindrome(self, s):
s_list = ['#']
for c in s:
s_list.append(c)
s_list.append('#') max_right = 0
mid = 0
p = [0 for _ in s_list]
p[0] = 1 for i in xrange(1, len(p)):
if i <= max_right:
if p[2*mid-i] < max_right-i:
p[i] = p[2*mid-i]
continue
else:
j = max_right - i
while i + j < len(s_list) and i - j >= 0 and s_list[i+j] == s_list[i-j]:
j = j + 1
p[i] = j
else:
j = 1
while i + j < len(s_list) and i - j >= 0 and s_list[i+j] == s_list[i-j]:
j = j + 1
p[i] = j
if max_right < p[i] + i - 1:
max_right = p[i] + i - 1
mid = i max_p = max(p)
max_index = p.index(max_p) longest = ""
for i in range(max_index-max_p+1, max_index+max_p):
if s_list[i] == '#':
continue
longest = longest + s_list[i]
return longest def main():
s = Solution()
string = "cubwqvhxdammpkwkycrqtegepyxtohspeasrdtinjhbesilsvffmnzznmltsspjwuogdyzvanalohmzrywdwqqcukjceothydlgtocukc"
#string = "abbabcba"
print s.longestPalindrome(string) if __name__ == "__main__":
import time
start = time.clock()
main()
print "%s sec" % (time.clock() - start)

[LeetCode][Python]Longest Palindromic Substring的更多相关文章

  1. LeetCode(4) || Longest Palindromic Substring 与 Manacher 线性算法

    LeetCode(4) || Longest Palindromic Substring 与 Manacher 线性算法 题记 本文是LeetCode题库的第五题,没想到做这些题的速度会这么慢,工作之 ...

  2. Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法)

    Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法) Given a string s, find the longest pal ...

  3. 求最长回文子串 - leetcode 5. Longest Palindromic Substring

    写在前面:忍不住吐槽几句今天上海的天气,次奥,鞋子里都能养鱼了...裤子也全湿了,衣服也全湿了,关键是这天气还打空调,只能瑟瑟发抖祈祷不要感冒了.... 前后切了一百零几道leetcode的题(sol ...

  4. LeetCode 5 Longest Palindromic Substring(最长子序列)

    题目来源:https://leetcode.com/problems/longest-palindromic-substring/ Given a string S, find the longest ...

  5. 【JAVA、C++】LeetCode 005 Longest Palindromic Substring

    Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...

  6. leetcode:Longest Palindromic Substring(求最大的回文字符串)

    Question:Given a string S, find the longest palindromic substring in S. You may assume that the maxi ...

  7. leetcode 5 :Longest Palindromic Substring 找出最长回文子串

    题目: Given a string S, find the longest palindromic substring in S. You may assume that the maximum l ...

  8. 蜗牛慢慢爬 LeetCode 5.Longest Palindromic Substring [Difficulty: Medium]

    题目 Given a string s, find the longest palindromic substring in s. You may assume that the maximum le ...

  9. 【LeetCode】Longest Palindromic Substring 解题报告

    DP.KMP什么的都太高大上了.自己想了个朴素的遍历方法. [题目] Given a string S, find the longest palindromic substring in S. Yo ...

随机推荐

  1. @Html.ActionLink 添加样式 html标签

    @Html.ActionLink(item.MessageTitle, "Detail", "News",new { MessageId = item.Mess ...

  2. Catalog和Schema

    http://www.codeweblog.com/database-schema-and-catalog/ http://blog.sina.com.cn/s/blog_515015800100et ...

  3. SpringMVC中使用zTree

    1  前端页面 <%@ page language="java" import="java.util.*" pageEncoding="UTF- ...

  4. 驳Linux不娱乐 堪比Win平台中十款播放器

    播放器在我们日常生活中扮演着非常重要的角色,在Windows操作系统中,播放器被应用的非常广泛,不但我们可以听音乐,甚至还可以听广播,制作铃声,下载音乐等等.而在Linux发行版中,缺少娱乐性一直性W ...

  5. JavaEE Tutorials (21) - Java EE安全:高级主题

    21.1使用数字证书331 21.1.1创建服务器证书332 21.1.2向证书安全域增加用户334 21.1.3为GlassFish服务器使用一个不同的服务器证书33421.2认证机制335 21. ...

  6. ant jsch.jar - 一个错误及解决办法

    ant jsch.jar -- 一个异常及解决方法 运行build.xml出现异常: Cause: Could not load a dependent class com/jcraft/jsch/L ...

  7. php解决与处理网站高并发 大流量访问的方法

    方法/步骤   首先,确认服务器硬件是否足够支持当前的流量 普通的P4服务器一般最多能支持每天10万独立IP,如果访问量比这个还要大, 那么必须首先配置一台更高性能的专用服务器才能解决问题 ,否则怎么 ...

  8. wx

    wx The classes in this module are the most commonly used classes for wxPython, which is why they hav ...

  9. cf-公式专场

    A. Again Twenty Five! time limit per test 0.5 seconds memory limit per test 64 megabytes input stand ...

  10. Floodlight中 处理packetin消息的顺序(1)

    当Controller和SW建立连接之后,就能够处理来自SW的各种OF msg.当接收到 packetin 消息之后,会将其分发给各个监听了这个OFMessage的listeners,所以假设我们要设 ...