9.最长回文子串-Leetcode 005(python)

2024-04-23 17:32

本文主要是介绍9.最长回文子串-Leetcode 005(python),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 题目描述

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

  • 示例

示例 1:

输入: "babad"
输出: "bab"
注意: "aba"也是一个有效答案。
示例 2:

输入: "cbbd"
输出: "bb"


  • 解决方案一

从字符串s的第一个字符开始遍历,判断往后的每一个字符串是否是回文子串,如果是的话,再比较该回文子串的长度与最长回文子串的长度。使用到了python的字符串切片操作,格式: [start:end:step]。

这种解法比较暴力,且费时。

  • 代码
class Solution:def longestPalindrome(self, s):""":type s: str:rtype: str"""#如果字符串为空或者长度为1,则直接返原字符串if len(s) == 1 or not s:return s#记录最长回文子串的长度 maxlen = 0#记录最长回文子串的内容result = ''#从头开始遍历字符串sfor i in range(len(s)):#从当前记录的最大回文子串的长度往后开始遍历查看,因为如果长度小于maxlen的话,即使是回文子串,也不是最长的,不可能作为结果输出for j in range(maxlen,len(s) - i):#字符串切片操作str_ = s[i:i+j+1]_rts = str_[::-1]#判断是否是回文子串且最长if str_ == _rts and len(str_) > maxlen:maxlen = len(str_)result = str_return result
  • 解决方案二

中心枚举的思想,遍历每一个字符,从当前字符串开始,假设它是回文子串的中心,判断左右的字符是否相等。重点在于区分回文子串的长度是奇数和偶数两种情况。

  • 代码二
class Solution:def longestPalindrome(self, s):""":type s: str:rtype: str"""l = len(s)maxlen = 0 result = ''for i in range(l):#中心枚举第一种情况:回文子串长度为奇数#从当前字符开始,判断它往前数第x个字符和往后数第x个字符是否相等x = 1while i-x>=0 and i+x <l:if s[i-x] == s[i+x]:x += 1else:breakx -= 1#更新maxlen和当前最长回文子串if(2*x+1)<=l and (2*x+1)>=maxlen:maxlen = 2*x+1result = s[i-x:i+x+1]#中心枚举第二种情况:回文子串长度为偶数#从当前字符串开始,判断它往前数第y个字符和往后数第y+1个字符#因为y从0开始,所以可以理解为判断当前字符和它往后数第1个,判断往前数第1个和往后数第2个,依次类推,即回文子串的中心在当前字符和它后一个字符的中间。y = 0while i-y>=0 and i+y+1 <l:if s[i-y] == s[i+y+1]:y += 1else:breaky -= 1#更新maxlen和当前最长回文子串if(2*y +2)<=l and (2*y+2)>=maxlen:maxlen = 2*y+2result = s[i-y:i+y+2]return result

 

这篇关于9.最长回文子串-Leetcode 005(python)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/929441

相关文章

哈希leetcode-1

目录 1前言 2.例题  2.1两数之和 2.2判断是否互为字符重排 2.3存在重复元素1 2.4存在重复元素2 2.5字母异位词分组 1前言 哈希表主要是适合于快速查找某个元素(O(1)) 当我们要频繁的查找某个元素,第一哈希表O(1),第二,二分O(log n) 一般可以分为语言自带的容器哈希和用数组模拟的简易哈希。 最简单的比如数组模拟字符存储,只要开26个c

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

poj2406(连续重复子串)

题意:判断串s是不是str^n,求str的最大长度。 解题思路:kmp可解,后缀数组的倍增算法超时。next[i]表示在第i位匹配失败后,自动跳转到next[i],所以1到next[n]这个串 等于 n-next[n]+1到n这个串。 代码如下; #include<iostream>#include<algorithm>#include<stdio.h>#include<math.

poj3261(可重复k次的最长子串)

题意:可重复k次的最长子串 解题思路:求所有区间[x,x+k-1]中的最小值的最大值。求sa时间复杂度Nlog(N),求最值时间复杂度N*N,但实际复杂度很低。题目数据也比较水,不然估计过不了。 代码入下: #include<iostream>#include<algorithm>#include<stdio.h>#include<math.h>#include<cstring

spoj705( 求不相同的子串个数)

题意:求串s的不同子串的个数 解题思路:任何子串都是某个后缀的前缀,对n个后缀排序,求某个后缀的前缀的个数,减去height[i](第i个后缀与第i-1 个后缀有相同的height[i]个前缀)。 代码如下: #include<iostream>#include<algorithm>#include<stdio.h>#include<math.h>#include<cstrin

csu1328(近似回文串)

题意:求近似回文串的最大长度,串长度为1000。 解题思路:以某点为中心,向左右两边扩展,注意奇偶分开讨论,暴力解即可。时间复杂度O(n^2); 代码如下: #include<iostream>#include<algorithm>#include<stdio.h>#include<math.h>#include<cstring>#include<string>#inclu

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学