当前位置: 首页 > news >正文

剑指Offer 48. 最长【不包含】重复字符的子字符串(Medium)/ 1044. 最长重复子串(返回任一子串)(Hard) / 重复子串问题!!!

  • 最长重复子串(返回最大长度)
  • 395. 每个字符至少重复 K 次的最长子串(Medium)/ 424. 最多替换 K 次后的最长重复子串(Medium)/ (非)重复串问题!!!

    【题目链接】
  1. 最长不含重复字符的子字符串(动态规划 / 双指针 + 哈希表,清晰图解)




代码

classSolution:### 1104 动态规划 + 哈希表 O(N)(64 ms,13.4 MB)deflengthOfLongestSubstring(self,s:str)->int:dic,res,tmp={},0,0# tmp表示前一时刻最长不含重复字符的子字符串的长度,初始化为0forjinrange(len(s)):# 遍历字符串中每一个字符i=dic.get(s[j],-1)# 获取下标idic[s[j]]=j# 更新某个字符s[j]出现的最新位置j(下标),更新哈希表tmp=tmp+1iftmp<j-ielsej-i# dp[j - 1] -> dp[j]res=max(res,tmp)# 更新最大值returnres### 1104 动态规划 + 线性查找 O(N2)(484 ms,13.6 MB)deflengthOfLongestSubstring(self,s:str)->int:res=tmp=0# tmp表示前一时刻最长不含重复字符的子字符串的长度,初始化为0forjinrange(len(s)):# 遍历字符串中每一个字符i=j-1# 初始化下标i,将i初始化为j左边的值whilei>=0ands[i]!=s[j]:i-=1# 从右往左更新i(逆序)tmp=tmp+1iftmp<j-ielsej-i# dp[j - 1] -> dp[j]res=max(res,tmp)# 更新最大值returnres### 1104 动态规划 + 双指针 O(N)(68 ms,13.6 MB)deflengthOfLongestSubstring(self,s:str)->int:dic,res,i={},0,-1# 初始化左指针i为-1forjinrange(len(s)):# 遍历字符串中每一个字符ifs[j]indic:# 检查当前字符是否在哈希表中i=max(dic[s[j]],i)# 若存在,则更新左指针idic[s[j]]=j# 更新某个字符s[j]出现的最新位置j(下标),更新哈希表res=max(res,j-i)# 更新最大值returnres
  • 返回最长无重复字符的子串(【对应上面方法3:双指针】直接用这个,同时返回子字符串和长度,2026.4
# 双指针classSolution:deflengthOfLongestSubstring(self,s):max_len=0max_sub=""ifnots:returnmax_sub,max_len# 滑动窗口:使用左指针 left 和右指针 right 维护一个窗口,窗口内字符都不重复left=0# 哈希表(集合):char_set 记录当前窗口中的字符,用于快速判断重复char_set=set()forrightinrange(len(s)):# 若当前字符已经在窗口内,移动左指针直到重复字符被移出whiles[right]inchar_set:char_set.remove(s[left])left+=1# 将当前字符加入窗口char_set.add(s[right])curr_len=right-left+1# 更新结果:每次窗口合法后,计算当前长度,# 若大于已记录的最大长度,则更新最大长度和对应的子串ifcurr_len>max_len:max_len=curr_len max_sub=s[left:right+1]# print(f"长度: {max_len}, 子串: '{max_sub}'")returnmax_sub,max_len

1044. 最长重复子串(返回任一子串)

  • 题解
classSolution:deflongestDupSubstring(self,s:str)->str:ans=''max_len,start,end,n=0,0,1,len(s)# 每次看s[start:end]在之后s[start+1:]是否也出现,因为在s[start:]肯定出现一次,所以总共出现次数>=2# 出现的话,更新max_len,同时end后移,看更长的是否满足# 不出现的话,表明以start开头的子串不可能出现>=2次,start后移whileend<n:ifs[start:end]ins[start+1:]:# 判断子串出现至少两次# 如果子串长度超过当前最大值,更新最大值和ansifmax_len<end-start:max_len=end-start ans=s[start:end]end+=1continuestart+=1returnans
http://www.jsqmd.com/news/709443/

相关文章:

  • AB 触摸屏常用操作步骤及常见问题解决方案
  • 厦门市翔安区寿苹电脑店:思明电脑置换推荐排行 - LYL仔仔
  • 终极Dell笔记本风扇控制指南:告别噪音困扰的完整解决方案
  • 山东最推荐的中学国际部学校课程有哪些?2026年青岛等地市场选择前五排名 - 十大品牌榜
  • 机房动力环境监控管理系统:全域覆盖,适配多类场景
  • NsCDE Front Panel详解:打造经典工作空间管理器
  • 投资控股集团数智化破局,标杆实践深度解析与转型指南(璞华公开课第6期活动回顾)
  • 告别臃肿!用Hono在Cloudflare Workers上5分钟搭建一个超轻量API(附完整代码)
  • 新手硬件工程师必看:SPI NOR Flash选型与电路设计避坑指南(含W25Q16BV实例)
  • 终极指南:3分钟学会用QtScrcpy在电脑上流畅控制安卓手机
  • React-antd-admin-template权限系统设计:页面权限与路由权限详解
  • 用TensorFlow 2.x和DenseNet121,手把手教你搭建一个数学图形分类器(附完整代码)
  • 本地部署OpenAI TTS:开源项目openai-edge-tts实战指南
  • 2026年乌鲁木齐全屋定制工厂深度横评:本地源头工厂如何破局异地定制困局 - 精选优质企业推荐官
  • 别再只用MD5存密码了!聊聊Java中那些更安全的哈希算法(附SHA-256、bcrypt实战代码)
  • 2026年乌鲁木齐全屋定制工厂购选指南:本地源头工厂如何破解异地定制难题 - 精选优质企业推荐官
  • MCP插件生态搭建全链路拆解,覆盖协议注册、能力协商、上下文同步与热重载调试
  • 给STM32项目加个“不掉电”的时钟:DS1302+纽扣电池完整供电与备份方案
  • pdf2json实战案例:构建企业级PDF数据处理系统
  • Excel/CSV分割工具使用指南
  • 解码回归技术:大语言模型在连续值预测中的应用
  • Element Plus深度解析:如何用现代Vue 3组件库构建企业级应用界面
  • Docker+AI=定时炸弹?资深SRE团队压测27种攻击路径后,锁定6个必须禁用的默认Capabilites
  • 如何快速掌握ASP.NET Core MVC:面向开发者的完整实战指南
  • 气密性测试设备厂家推荐:技术路径与产业选型全景透视 - 品牌评测官
  • 从无人机航拍到显微成像:OpenCV Stitcher在不同场景下的实战应用与性能分析
  • 掌握GORM表达式构建:Expr函数的终极指南
  • Preact版本迁移终极指南:如何实现升级过程的平滑过渡
  • kew快速入门指南:10个命令让你立即开始播放音乐
  • MCP for Unity:用自然语言驱动AI助手,重塑Unity开发工作流