5. 最长回文子串

一、向右拓展

算法思路

  • 你用res记录当前找到的最长回文子串。
  • 每次遍历到s[i]时,尝试找到以s[i]结尾的、比当前res更长的回文子串。
    • 先尝试长度为len(res)+2(即起点i-len(res)-1)的子串,看是不是回文。
    • 如果不是,再试len(res)+1的子串(起点i-len(res)),看是不是回文。
  • 每次找到更长的回文串就更新res
class Solution:def longestPalindrome(self, s: str) -> str:res = ''for i in range(len(s)):start = max(i - len(res) -1, 0)temp = s[start: i+1]if temp == temp[::-1]:res = tempelse:temp = temp[1:]if temp == temp[::-1]:res = tempreturn res

复杂度分析

  • 外层for循环 O(n)
  • 内部切片和反转判断回文,最坏O(n)(每次检查的temp长度最大可能接近n)
  • 最坏时间复杂度 O(n^2)
  • 空间复杂度 O(n)(切片和反转的临时空间)

二、中心拓展

算法思路

  • 对于每个位置 i,以其为中心,分别尝试两种情况:
    1. 以 i 为中心(奇数长度回文串)
    2. 以 i 和 i+1 为中心(偶数长度回文串)
  • 对每种中心,向两边扩展,若左右字符相等,则回文长度增加。
  • 每次扩展后,如果回文长度超过当前最长,则更新结果 res
class Solution:def longestPalindrome(self, s: str) -> str:res = ''for i in range(len(s)):# 奇数长度l, r = i, iwhile l >= 0 and r < len(s) and s[l] == s[r]:if r - l + 1 > len(res):res = s[l:r+1]l -= 1r += 1# 偶数长度l, r = i, i+1while l >= 0 and r < len(s) and s[l] == s[r]:if r - l + 1 > len(res):res = s[l:r+1]l -= 1r += 1return res

复杂度分析

  • 外层循环 O(n)
  • 每次中心扩展,最坏O(n)(从中心扩展到两边的极限情况)
  • 总体时间复杂度:O(n^2)
  • 除了结果字符串和少量变量,空间复杂度:O(1)

优化代码:

把更新res的判断提前,减少写法重复:

这样奇偶合并成一段代码,逻辑更紧凑。

class Solution:def longestPalindrome(self, s: str) -> str:res = ''for i in range(len(s)):for l, r in [(i, i), (i, i+1)]:while l >= 0 and r < len(s) and s[l] == s[r]:l -= 1r += 1if r - l - 1 > len(res):res = s[l+1:r]return res

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/910643.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/910643.shtml
英文地址,请注明出处:http://en.pswp.cn/news/910643.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

✨从零搭建 Ubuntu22.04 + Python3.11 + PyTorch2.5.1 GPU Docker 镜像并上传 Docker Hub

&#x1f680; 从零搭建 Ubuntu22.04 Python3.11 PyTorch2.5.1 GPU Docker 镜像并上传 Docker Hub 在 AI 项目开发中&#xff0c;构建统一的运行环境是一件非常重要的事情。使用 Docker 可以极大地提升部署效率、保证环境一致性。本文将手把手带你&#xff1a; ✅ 构建一个…

纪念抗战胜利知识答题pk小程序

纪念抗战胜利知识答题PK小程序通常有以下功能&#xff1a; 一、基础答题功能 题目展示&#xff1a;清晰呈现题目内容&#xff0c;支持文字、图片、音频或视频等多种形式的题目素材&#xff0c;且能按选择题、填空题、判断题等不同题型分类展示。答案提交与判断&#xff1a;用…

AI模型本质与学习范式解析

从统计学习&#xff08;也就是数学&#xff09;的角度来分析深度学习模型的本质。 频率派与贝叶斯派对模型本质理解的差异&#xff1a;前者认为学习参数估计&#xff0c;后者认为学习后验分布。不过这个问题下概率分布的视角更本质。 三个核心部分&#xff1a;任务类型分类&a…

【AI落地应用实战】Chaterm:重新定义终端操作的AI智能工具

目录 一、AI Agent 终端新范式二、Chaterm安装与基础功能体验2.1、源码安装与配置2.2、基础功能体验 三、Chaterm运维案例实践四、从 Chaterm 看智能终端工具的演进方向4.1 更低门槛&#xff1a;面向“非专业人员”的运维民主化4.2 更强扩展性&#xff1a;从工具到平台的演化 五…

IO多路复用——Select底层原理深度分析(流程图)

文章目录 1.kern_select 参数验证和初始化流程2. do_select() 详细实现流程3. 位图数据结构详解4. 文件描述符处理详细流程5. Poll方法调用链6. 等待机制实现7. 用户态处理就绪事件8. 性能瓶颈分析9. 与其他I/O多路复用对比 Select 整体调用流程&#xff1a; #mermaid-svg-766A…

多光谱扫描技术在实物建模中的应用:如何实现1:1真实材质还原

在实物建模领域&#xff0c;传统方式常常陷入尴尬境地&#xff1a;耗费大量时间精力构建的模型&#xff0c;材质看起来却与真实物体相差甚远&#xff0c;塑料质感的 “金属”、模糊不清的纹理&#xff0c;让模型失去了应有的真实感。而在文物保护、产品设计等对真实材质还原要求…

Python复杂网络分析和建模库之networkx使用详解

概要 在当今信息爆炸的时代,复杂网络无处不在。NetworkX是一个用于创建、操作和研究复杂网络结构、动态和功能的Python库。它提供了丰富的数据结构来表示各种类型的网络,如无向图、有向图、加权图等,并支持大量的图算法,包括最短路径计算、中心性分析、社区发现等。 安装 …

前端依赖升级完全指南:npm、pnpm、yarn 实践总结

在前端项目开发过程中&#xff0c;定期升级依赖不仅能享受新特性、修复安全问题&#xff0c;还能保证工具链长期稳定运行。本文全面总结 npm、pnpm、yarn 三大主流包管理器在 依赖包升级 方面的实践方法&#xff0c;并补充版本符、依赖安装的基础知识&#xff0c;适合新手与有经…

[持续集成]

学习目标 能够使用 Git 代码托管平台管理代码能够实现 jenkinspostman 的持续集成能够实现 jenkins代码 的持续集成 持续集成 概念 : 将自己工作成果持续不断地把代码聚集在一起,成员可以每天集成一次或多次相关工具 : git : 代码管理工具,自带本地仓库gitee : 远程代码管理…

FSMC控制LCD(TFTLCD:Z350IT002)显示案例

显存不一定要擦除&#xff0c;只要来一个地址就可以对其进行读写&#xff0c;而且一般的需求是不停的写入&#xff08;不同的像素点给不同的值&#xff09;&#xff0c;所以是RAM&#xff08;flash和E2PROM要擦除才能写入&#xff09;&#xff0c;由于FSMC没有DRAM所以我们只能…

云原生周刊:Argo CD v3.1 正式发布

开源项目推荐 Kubewall Kubewall 是一个轻量级的开源 Kubernetes 仪表盘&#xff0c;支持多集群管理&#xff0c;主打单二进制部署和浏览器访问&#xff0c;提供实时资源监控、YAML 编辑、拓扑视图、日志查看等功能。它使用 Go 与 React 构建&#xff0c;支持通过 Docker、He…

Aerotech系列(3)开发库介绍

库对象模型 名空间列表 NamespaceDescriptionAerotech.A3200 The main namespace of the Aerotech A3200 .NET library Aerotech.A3200.Callbacks Contains the classes that allow interacting with callbacks Aerotech.A3200.Commands Contains the classes that allows …

Spring--IOC容器的一些扩展属性

一、BeanFactoryPostProcessor和BeanPostProcessor BeanFactoryPostProcessor的作用是在实例化前修改BeanDefinition的属性 BeanPostProcessor的作用是在bean完成创建实例、填充属性之后&#xff0c;初始化阶段的前后都会对bean进行操作&#xff0c;使用postProcessBeforeIni…

8w字:推荐系统技术体系深度解析:从理论基础到工业实践的完整指南

插话&#xff1a;刚接触推荐系统还是大一下作比赛&#xff0c;然后找资料&#xff0c;顺便在巧合下在“识典百科”&#xff08;现在叫快懂百科&#xff0c;抖音的&#xff0c;改好几回名了&#xff0c;还要一条条插入引用资料&#xff0c;现在看来&#xff0c;好像抖音也不在乎…

RA4M2开发IOT(8)----IIC驱动OLED

RA4M2开发IOT.8--IIC驱动OLED 概述视频教学样品申请硬件准备参考程序修改IIC驱动OLED属性配置移植SSD1306字符取模ASCII显示图片取模显示图片 概述 本章旨在通过 IC 接口驱动 OLED 显示屏&#xff08;常见型号如 SSD1306&#xff09;&#xff0c;实现图形和文本的显示功能。OL…

数组题解——​轮转数组【LeetCode】

189. 轮转数组 通过三次反转操作&#xff0c;可以实现数组的轮转&#xff1a; 反转整个数组: 将数组完全反转&#xff0c;使得原数组的后 k 个元素移动到数组的前面。反转前 k 个元素: 将前 k 个元素反转&#xff0c;恢复它们的原始顺序。反转后 n - k 个元素: 将后 n - k 个元…

AR 眼镜之-条形码识别-实现方案

目录 &#x1f4c2; 前言 AR 眼镜系统版本 条形码识别 1. &#x1f531; 技术方案 1.1 技术方案概述 1.2 实现方案 1&#xff09;相机App显示模块 2&#xff09;算法so库JNI模块 3&#xff09;算法条形码识别模块 2. &#x1f4a0; 实现相机App显示模块 2.1 创建 Ba…

华为云 Flexus+DeepSeek 征文|基于 CCE 集群部署 Dify 平台工作流:科研论文翻译与 SEO 优化工具的全流程设计实践

华为云 FlexusDeepSeek 征文&#xff5c;基于 CCE 集群部署 Dify 平台工作流&#xff1a;科研论文翻译与 SEO 优化工具的全流程设计实践 背景 作为被科研论文折磨已久的大学生&#xff0c;希望研究成果能被更多人看到&#xff0c;尤其是在学术全球化的趋势下&#xff0c;论文翻…

C++对象继承详解:从入门到精通

继承是面向对象编程的三大特性之一&#xff0c;也是C中实现代码复用和多态的重要机制。本文将带你深入理解C继承的核心概念与应用。 一、继承的基本概念 1.1 什么是继承&#xff1f; 继承允许我们基于已有的类创建新类&#xff0c;新类&#xff08;派生类&#xff09;可以继…

Jenkins安装与配置全攻略:从入门到高级功能实战

在DevOps实践中,Jenkins作为最流行的持续集成工具之一,扮演着至关重要的角色。本文将全面介绍Jenkins的安装、配置及高级功能使用,帮助开发、运维和测试团队快速搭建高效的CI/CD流水线。 一、Jenkins安装 1.1 环境准备 Jenkins官网:https://jenkins.io 注意:Jenkins 2…