回文串,即:

nums = 'aba'
print(nums == nums[::-1]) # True 反转该序列后和之前元素相等

这里我们需要找出给定字符串里的最长回文串,即:

nums = 'abcbde'
'bcb' 为 nums 的最长回文串子序列

枚举法

nums = 'babad'D = dict()      # 储存之前出现过的字符串的序列
max_len = 0     # 初始化 回文串的长度
num = nums[0]   # 初始化 回文串for i, s in enumerate(nums):if s in D:# 记录字符出现的索引D[s] += [i]# 遍历字符s出现的索引for j in D[s]:# 判断字符s的 j 索引和 i+1 索引之间的字符串是不是回文if nums[j:i+1] == nums[j:i+1][::-1]:a = nums[j:i+1]# 首次满足的长度最大break# 判断当前回文的长度和已知的长度比较 大的话更新 max_len 和 numif i+1 - j > max_len:max_len = i+1 - jnum = aelse:# 添加字符出现的索引D[s] = [i]print(num)

输出:’bab'

动态规划

nums = 'babad'n = len(nums)
# 用 dp 矩阵记录nums子序列的状态
# 若 dp[i][j] = True,表示 nums[i:j+1] 为回文串
#    dp[i][j] = False,表示 nums[i:j+1] 不是回文串
dp = [[False]*n for _ in range(n)]
# 由于单个字符均是回文串,所以设置dp[i][j]为True。且 j>=i ,即dp的下三角全是不能用的
for i in range(n):dp[i][i] = Truemax_len = 1  # 初始化最大长度
start = 0    # 初始化最长回文串的起始位置# 已经设置对角线上的状态全为 True,这里从索引 1 开始
for j in range(1, n):# 满足 j > ifor i in range(j):# 如果dp[i][j] <= 2,意味着nums[i:j+1]为回文串的前提是两端相等。if j-i <= 2:if nums[j] == nums[i]:# 更新状态 和 计算当前长度dp[i][j] = True curent_len = j-i+1else:# 如果dp[i][j] > 2,意味着nums[i:j+1]为回文串的前提是两端相等 和 nums[i+1:j]也是回文串。if nums[j] == nums[i] and dp[i+1][j-1]:dp[i][j] = Truecurent_len = j-i+1# 如果是回文串,比较当前长度和之前长度的大小,变大更新最大长度和起始位置。if dp[i][j]:if curent_len > max_len:max_len = curent_lenstart = i
# 通过最大长度和起始索引计算回文串。
print(nums[start:start+max_len])

输出:’bab'

python找出字符串中的最长回文串子序列相关推荐

  1. LeetCode 2108. 找出数组中的第一个回文字符串

    文章目录 1. 题目 2. 解题 1. 题目 给你一个字符串数组 words ,找出并返回数组中的 第一个回文字符串 .如果不存在满足要求的字符串,返回一个 空字符串 "" . 回 ...

  2. 2108. 找出数组中的第一个回文字符串

    给你一个字符串数组 words ,找出并返回数组中的 第一个回文字符串 .如果不存在满足要求的字符串,返回一个 空字符串 "" . 回文字符串 的定义为:如果一个字符串正着读和反着 ...

  3. 如何找到字符串中的最长回文子串?

    作者 | channingbreeze 责编 | 胡巍巍 小史是一个应届生,虽然学的是电子专业,但是自己业余时间看了很多互联网与编程方面的书,一心想进BAT互联网公司.可是努力了很久,别说BAT了,连 ...

  4. leetcode 5. Longest Palindromic Substring 字符串中的最长回文数 逐步从O(n^2)优化至线性时间

    题目 解析 思路一 暴力解法 思路二 指针+最大长度 思路3 由中间至两边找回数 思路4 Manacher's algorithm 线性时间 参考文档 题目 链接 给定一个字符串 s,找到 s 中最长 ...

  5. LeetCode 28. 找出字符串中第一个匹配项的下标 -- 字符串编码成数字匹配

    找出字符串中第一个匹配项的下标 中等 1.6K 相关企业 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 ...

  6. 算法Day8|字符串专题二 剑指 Offer 58 - II. 左旋转字符串,28. 找出字符串中第一个匹配项的下标,459. 重复的子字符串

    剑指 Offer 58 - II. 左旋转字符串 解题思路: 反转区间为前n的子串 反转区间为n到末尾的子串 反转整个字符串 class Solution {public String reverse ...

  7. Python找出列表中出现次数最多的元素三种方式

    通过三种方式给大家介绍,具体详情如下所示: 方式一: 原理:创建一个新的空字典,用循环的方式来获取列表中的每一个元素,判断获取的元素是否存在字典中的key,如果不存在的话,将元素作为key,值为列表中 ...

  8. 28.找出字符串中第一个匹配项的下标

    28.找出字符串中第一个匹配项的下标 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始).如果 ...

  9. 刷题笔记之十 (小易的升级之路+找出字符串中第一个只出现一次的字符+洗牌+MP3光标位置)

    目录 1.存取任意指定序号的元素和在最后进行插入和删除运算,利用顺序表存储最节省时间 2. 数据结构中具有记忆功能的是栈 3. 递归程序的优化一般为 尾递归优化 4.二叉树遍历,前中后序遍历用到的是栈 ...

最新文章

  1. 快速开发rails、==常用插件==
  2. windows cmd color颜色设置
  3. 军队可以用oracle,使用Oracle JRockit 提高tomcat性能
  4. 个简单C++程序反汇编解析 (Rev. 3)
  5. Microsoft Windows Workflow Foundation 4.0 Cookbook
  6. CTFshow 命令执行 web65
  7. 傅里叶变换性质证明卷积_积分变换(3)——傅里叶变换的性质
  8. Docker创建自己的镜像库
  9. 视频描述(Video Captioning)调研
  10. Extjs EditorGridPanel
  11. ubuntu freeradius mysql_初试freeradius
  12. perl脚本基础总结(转)
  13. Vue CLI脚手架安装及使用
  14. MD5加密中文字符问题详解
  15. Telemetry 基础
  16. 名帖299 王铎 行书《书法册页李贺诗四首》
  17. 《精力管理》读书笔记——第二部分
  18. php实现aes ecb模式加密,PHP、Python、Java的AES ECB加密实现-Fun言
  19. Matlab中传递函数的几种输入方式
  20. 分布式AKF拆分原则

热门文章

  1. 计算机科学的重要意义,论文开题报告计算机科学与技术的现代化运用,理论意义和现实意义,对现代社会的重要性,为什么要研究这个...
  2. 中国拟薄水铝石市场产销情况及投资前景预测报告2022-2027年
  3. 大脑52分区功能及位置_位置功能
  4. background系列属性(background-color背景颜色、background-image背景图片、background-repeat重复方式以及background-position)
  5. PhotoZoom图像缩放方法效果对比
  6. 书_学习过程_四大天王_good_计算机经典书籍介绍[转]
  7. 爱情,你究竟是什么模样?
  8. CVPR2021投稿流程
  9. 三种网站设计思维促进客户成交
  10. 0Ω电阻到底能过多大电流