恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

Python 学习记录:力扣字符串专题第 3 题和第 5 题

  • 首页
  • 资讯中心
  • /
  • Python 学习记录:力扣字符串专题第 3 题和第 5 题

相关资讯

TwinCAT+TE1111仿真EtherCAT从站 2026/8/14 14:05:31
GHelper:华硕笔记本性能控制工具的轻量免费终极替代方案 2026/8/14 14:05:31
收藏!AI Agent 开发语言与框架选型指南:Python、TypeScript、Java 深度解析 2026/8/14 14:00:30

最新资讯

C语言指针高频误区:为什么栈指针不能返,malloc堆指针可以返?​
告别风扇噪音困扰:如何用FanControl软件3步搞定风扇控制难题
元宇宙对世界模型发展的启发与借鉴意义——以半导体晶圆厂为例
TypeScript 灵魂拷问:type 和 interface 到底怎么选?
TVA-具身智能最新进展(3):主动视觉感知提升实时性
Portainer:Docker可视化Web管理面板的新手首选方案

今日推荐

青岛煜鹏网站建设公司如何帮助传统企业实现数字化转型破局与增长路径
内蒙古生产建设兵团四师三十四团知青网站:承载岁月记忆与青春荣耀的精神家园
梅州市住房与城乡建设局官网:获取权威建筑信息、政策解读与民生服务的最佳平台入口

本周热门

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁
如何快速生成中国车牌图片:Python开源工具完整指南
当 LLM 遇见大文档:主流开源项目如何处理上下文超限

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

Python 学习记录:力扣字符串专题第 3 题和第 5 题

发布时间:2026/8/14 14:05:31
Python 学习记录:力扣字符串专题第 3 题和第 5 题 Python 学习记录力扣字符串专题第 3 题和第 5 题前言今天我们从数组题刷到了字符串专题在老师的指导下完成了力扣第 3 题和第 5 题。第 3 题我用哈希集合和动态窗口两种解法完成第 5 题我分别用中心扩展和动态规划写出了两种解法。第一次发现同一道题可以有好几条路。一、第 3 题无重复字符的最长子串题目是找字符串里最长的、没有重复字符的连续子串。这道题我写了两种解法。方法一哈希集合思路枚举每个起点用set记录已经出现过的字符然后一直向右扩展遇到重复字符就停止每次更新最长长度。这个写法很直观但时间复杂度是 O(n²)。演示代码deflength_of_longest_substring(s):ans0foriinrange(len(s)):seenset()forjinrange(i,len(s)):ifs[j]inseen:breakseen.add(s[j])ansmax(ans,j-i1)returnans方法二动态窗口滑动窗口思路用左右两个指针维护一个窗口set记录窗口内的字符。右指针不断向右扩展如果遇到重复字符就让左指针一直右移直到重复字符被移出窗口每次更新最大长度。时间复杂度是 O(n)。演示代码deflength_of_longest_substring(s):seenset()left0ans0forrightinrange(len(s)):whiles[right]inseen:seen.remove(s[left])left1seen.add(s[right])ansmax(ans,right-left1)returnans运行结果abcabcbb返回3bbbbb返回1pwwkew返回3收获两种方法都用到了哈希集合set区别在于第一种只判断重复第二种还利用了窗口的连续性。老师让我对比两种解法的复杂度我才真正明白滑动窗口省在哪里。二、第 5 题最长回文子串回文就是正着读和倒着读都一样的字符串比如aba、bb。这道题我也写了两种解法。方法一中心扩展每个位置都可以当作回文中心向两边扩展。中心有两种单个字符对应奇数长度和相邻两个字符对应偶数长度。演示代码defexpand(s,left,right):whileleft0andrightlen(s)ands[left]s[right]:left-1right1returns[left1:right]deflongest_palindrome(s):resforiinrange(len(s)):oddexpand(s,i,i)evenexpand(s,i,i1)iflen(odd)len(res):resoddiflen(even)len(res):resevenreturnres运行结果babad返回bab或abacbbd返回bb。要点中心有两种情况所以expand()要分别以(i, i)和(i, i 1)调用两次。方法二动态规划dp[i][j]表示s[i:j1]是不是回文。长度 1 一定是回文长度 2 看两个字符是否相等更长的情况看首尾是否相等且内部dp[i1][j-1]为True。演示代码deflongest_palindrome_dp(s):nlen(s)dp[[False]*nfor_inrange(n)]resforlengthinrange(1,n1):foriinrange(n-length1):jilength-1iflength1:dp[i][j]Trueeliflength2:dp[i][j]s[i]s[j]else:dp[i][j]s[i]s[j]anddp[i1][j-1]ifdp[i][j]andlengthlen(res):ress[i:j1]returnres运行结果和中心扩展一致。踩坑动态规划必须按子串长度从小到大遍历因为dp[i1][j-1]依赖更短的子串。我第一次按i从前往后遍历结果用到了还没计算出来的值。三、复盘第 3 题的两条路先用哈希集合暴力判断再用滑动窗口优化核心都是靠set判断重复第 5 题的两条路中心扩展直观动态规划更套路化两者的时间复杂度都是 O(n²)同一种解法写完再自己对比一遍复杂度理解会更深。结尾留言今天从数组刷到字符串发现每类题都有自己的“套路”。接下来我会继续整理做过的题目把哈希集合、滑动窗口、动态规划这些思路都总结成自己的笔记。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号