给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。

示例 1:

输入: "babad"

输出: "bab"

注意: "aba"也是一个有效答案。

示例 2:

输入: "cbbd"

输出: "bb"

思考这个问题第一是从List两边考虑,先找到两个相同的点, 然后各像中心移动1步。这个方法被PASS的原因是遇到输入“aaabaaaa”时,两边同时移动则只能返回“aaaa”

第二次从回文子串的中心考虑,先假设List中每一个点ii都有回文子串,接下来验证l[ii-1]和 l[ii+1]是否相同,如果相同就继续验证l[ii-2]和 l[ii+2]。对比所有结果,返回最大的子串。

class Solution:

def longestPalindrome(self, s):

""":type s: str:rtype: str"""

l=list(s)

length = len(l)

if length == 0:

return ""

if length == 1:

return s

temp=[]

result = []

i = 0

ii = 0

j = 1

flag = True

while ii < length:

i = ii - 1

j = ii + 1

while j < length and l[ii] == l[j]:

j = j + 1

temp = l[ii:j]

while (i>=0 and j<=length-1 and l[i] == l[j]):

temp = l[i:j+1]

i = i - 1

j = j + 1

if len(temp) > len(result):

result = temp

ii = ii + 1

if len(result) == 0:

return l[0]

return "".join(result)

时间复杂度是O(n^2),不知道是不是算错了,因为结果此方法速度在最后10%中。

这里提供一个大神的O(n)解法,用到了倒叙list对比。

class Solution:

def longestPalindrome(self, s):

"""

:type s: str

:rtype: str

"""

# 如果字符串长度小于2或者s等于它的倒序,则直接返回s

if len(s) < 2 or s == s[::-1]:

return s

n = len(s)

# 定义起始索引和最大回文串长度,odd奇,even偶

start, maxlen = 0, 1

# 因为i=0的话必然是不可能会有超过maxlen情况出现,所以直接从1开始

for i in range(1, n):

# 取i及i前面的maxlen+2个字符

odd = s[i - maxlen - 1:i + 1] # len(odd)=maxlen+2

# 取i及i前面的maxlen+1个字符

even = s[i - maxlen:i + 1] # len(even)=maxlen+1

if i - maxlen - 1 >= 0 and odd == odd[::-1]:

start = i - maxlen - 1

maxlen += 2

continue

if i - maxlen >= 0 and even == even[::-1]:

start = i - maxlen

maxlen += 1

return s[start:start + maxlen]

最长回文子串python_最长回文子串(Python)相关推荐

  1. 最长单调递增子序列 python_最长单调递增子序列

    前面三篇博客分别讲了贪心,递归,分治,今天就说个简单的动态规划(DP)的题目吧.在我心中DP算是比较难的算法,尤其像状态DP,树形DP,因为实力问题就说一个简单的线性DP--最长单调递增子序列. 题目 ...

  2. 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串 (转)...

    作者:寒小阳 时间:2013年9月. 出处:http://blog.csdn.net/han_xiaoyang/article/details/11969497. 声明:版权所有,转载请注明出处,谢谢 ...

  3. 最长回文子序列与最长回文子串

    最长回文子序列与最长回文子串不同. 字符串的子串:一个字符串中连续的一段就是这个字符串的子串. 最长回文子串:就是字符串中最长的身为回文串的子串. 最长回文子序列不一定连续 最长回文子序列: 方法一: ...

  4. 【代码训练营】day56 | 647. 回文子串 516.最长回文子序列

    所用代码 java 回文子串 LeetCode 647 题目链接:回文子串 LeetCode 647 - 中等 思路 dp[i] [j]:[i, j]子串是否是回文子串,是回文就是true 递推公式: ...

  5. 最长回文子串与最长回文子序列

    文章目录 最长回文子串与最长回文子序列 最长回文子串 题目描述 dp解法 从中心扩展 马拉车算法 最长回文子序列 题目描述 dp 解法 递归思想 最长回文子串与最长回文子序列 最长回文子串 LeetC ...

  6. LeetCode / Scala - 无重复字符最长子串 ,最长回文子串

    一.引言 LeetCode 里有一类字符子串问题,这里主要分析无重复字符的最长子串与最长回文子串,总结相关方法. 二.无重复字符最长子串 1.题目要求 给定字符串 s,要求找出字符内无重复的最长子串, ...

  7. CSU 1328 近似回文词【最长回文字符串(三种方法)】

    输入一行文本,输出最长近似回文词连续子串.所谓近似回文词是指满足以下条件的字符串: 1. S以字母开头,字母结尾 2. a(S)和b(S)最多有2k个位置不同,其中a(S)是S删除所有非字母字符并且把 ...

  8. 字符串相关处理kmp,前缀数,后缀树,后缀数组,最长回文串,最长重复字串,最长非重复字串

    1. 最长回文串 一般用后缀数组或者后缀树可以解决, 用此方法:http://blog.csdn.net/v_july_v/article/details/6897097 预处理后缀树,使得查询LCA ...

  9. python求最大回文数_python最长回文串算法

    给定一个字符串,要求在这个字符串中找到符合回文性质的最长子串.所谓回文性是指诸如 "aba","ababa","abba"这类的字符串,当然 ...

最新文章

  1. 最热开源无服务器函数:五大Fission架构参考
  2. redisson 集合使用示例(RList、Rset、RMap)
  3. VS2010设置全局Include和Lib目录
  4. 一次系统调用开销到底有多大?
  5. 走近分形与混沌(part7)--三体与混沌
  6. 简化Swagger使用的自制Starter:spring-boot-starter-swagger,欢迎使用和吐槽
  7. mysql5.7卸载语句_MySQL5.7完全卸载
  8. java:输出流程printStream
  9. UI自动化学习过程get的知识点
  10. 吉他录音混音教程入门|连这些录音知识都不懂,以后还怎么“混”?| MZD Studios
  11. shell脚本合集2
  12. Hbuilder无法正常运行微信小程序模拟器到指定页面为启动页
  13. Android Studio 实现视频播放暂停功能
  14. 致歉信:拖更两天抱歉了
  15. 部门平均工资mysql_按部门统计各工资级别的人数、平均工资。
  16. 核心案例|中国民用航空飞行学院半实物飞行仿真平台
  17. vi编辑器的四种退出方式
  18. 基于TCAM 的高速路由查找
  19. 服务器安装jkd1.8运行jar以及一系列的操作
  20. js中正则表达式的应用

热门文章

  1. 北京周聪项目客商支付join用法
  2. Hashtable:仅有两列的表
  3. 产品经理挑战赛,你敢来吗?
  4. B端设计指南-表格设计的常见问题
  5. 如何改变“便宜没好货”的这类用户心理?
  6. 如何理解社交效应「蒸发式降温」?
  7. 推荐干货 | 我在阿里做运营:八一八运营经典误区
  8. PMcaff-干货| 内容营销可不仅仅是点击量而已
  9. 【专访】小米产品经理颠覆早教行业,欲送给孩子1000万美金的人生
  10. 巧用iptables搞定SYN洪水攻击!