最长回文子串python_最长回文子串(Python)
给定一个字符串 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)相关推荐
- 最长单调递增子序列 python_最长单调递增子序列
前面三篇博客分别讲了贪心,递归,分治,今天就说个简单的动态规划(DP)的题目吧.在我心中DP算是比较难的算法,尤其像状态DP,树形DP,因为实力问题就说一个简单的线性DP--最长单调递增子序列. 题目 ...
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串 (转)...
作者:寒小阳 时间:2013年9月. 出处:http://blog.csdn.net/han_xiaoyang/article/details/11969497. 声明:版权所有,转载请注明出处,谢谢 ...
- 最长回文子序列与最长回文子串
最长回文子序列与最长回文子串不同. 字符串的子串:一个字符串中连续的一段就是这个字符串的子串. 最长回文子串:就是字符串中最长的身为回文串的子串. 最长回文子序列不一定连续 最长回文子序列: 方法一: ...
- 【代码训练营】day56 | 647. 回文子串 516.最长回文子序列
所用代码 java 回文子串 LeetCode 647 题目链接:回文子串 LeetCode 647 - 中等 思路 dp[i] [j]:[i, j]子串是否是回文子串,是回文就是true 递推公式: ...
- 最长回文子串与最长回文子序列
文章目录 最长回文子串与最长回文子序列 最长回文子串 题目描述 dp解法 从中心扩展 马拉车算法 最长回文子序列 题目描述 dp 解法 递归思想 最长回文子串与最长回文子序列 最长回文子串 LeetC ...
- LeetCode / Scala - 无重复字符最长子串 ,最长回文子串
一.引言 LeetCode 里有一类字符子串问题,这里主要分析无重复字符的最长子串与最长回文子串,总结相关方法. 二.无重复字符最长子串 1.题目要求 给定字符串 s,要求找出字符内无重复的最长子串, ...
- CSU 1328 近似回文词【最长回文字符串(三种方法)】
输入一行文本,输出最长近似回文词连续子串.所谓近似回文词是指满足以下条件的字符串: 1. S以字母开头,字母结尾 2. a(S)和b(S)最多有2k个位置不同,其中a(S)是S删除所有非字母字符并且把 ...
- 字符串相关处理kmp,前缀数,后缀树,后缀数组,最长回文串,最长重复字串,最长非重复字串
1. 最长回文串 一般用后缀数组或者后缀树可以解决, 用此方法:http://blog.csdn.net/v_july_v/article/details/6897097 预处理后缀树,使得查询LCA ...
- python求最大回文数_python最长回文串算法
给定一个字符串,要求在这个字符串中找到符合回文性质的最长子串.所谓回文性是指诸如 "aba","ababa","abba"这类的字符串,当然 ...
最新文章
- 最热开源无服务器函数:五大Fission架构参考
- redisson 集合使用示例(RList、Rset、RMap)
- VS2010设置全局Include和Lib目录
- 一次系统调用开销到底有多大?
- 走近分形与混沌(part7)--三体与混沌
- 简化Swagger使用的自制Starter:spring-boot-starter-swagger,欢迎使用和吐槽
- mysql5.7卸载语句_MySQL5.7完全卸载
- java:输出流程printStream
- UI自动化学习过程get的知识点
- 吉他录音混音教程入门|连这些录音知识都不懂,以后还怎么“混”?| MZD Studios
- shell脚本合集2
- Hbuilder无法正常运行微信小程序模拟器到指定页面为启动页
- Android Studio 实现视频播放暂停功能
- 致歉信:拖更两天抱歉了
- 部门平均工资mysql_按部门统计各工资级别的人数、平均工资。
- 核心案例|中国民用航空飞行学院半实物飞行仿真平台
- vi编辑器的四种退出方式
- 基于TCAM 的高速路由查找
- 服务器安装jkd1.8运行jar以及一系列的操作
- js中正则表达式的应用