news 2026/5/28 19:17:07

D.二分查找-二分答案-求最大——2982. 找出出现至少三次的最长特殊子字符串 II

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
D.二分查找-二分答案-求最大——2982. 找出出现至少三次的最长特殊子字符串 II

题目链接:2982. 找出出现至少三次的最长特殊子字符串 II(中等)

算法原理:

解法:二分查找

98ms击败51.14%

时间复杂度O(Nlogn)

核心思路,我们可以通过顺序表数组,把各个字母的各个连续段长度存起来,通过二分查找找到符合的子串长度

①目标变量:子串长度

②目标条件:s中出现≥3次的最长特殊子字符串长度

③转换逻辑:当前子串长度mid下,能否有≥3次的最长特殊子字符串

具体步骤:

①确定区间边界:

left:0

right:s的长度

②确定二分模型:由于要找最长的特殊子串长度,找最长用最右端点模型,如果当前mid长度下不能凑出≥3次的最长特殊子字符串长度,说明mid太大了,应该向左调整,变小点以便适应更多次数,也就是说呈负相关单调:子串长度↑ 目标条件符合度↓

③check方法设计:

1.如果mid为0,说明一定为不能凑出特殊子串,直接返回false

2.遍历每个小写字母,看看每段的长度能否凑出来

遍历过程中如果遇到空表,直接跳过

如果这段比mid小,就跳过找下一段

比mid大就累加这段的贡献量,由于特殊子串连续,贡献量长度+1-mid

比如mid=3,该段=5,那么这段可以是123、234、345共3段,正好是5+1-3=3,对的上

如果凑不出就返回true,向左调整mid

Java代码:

class Solution { private static List<Integer>[] groups; public int maximumLength(String ss) { //统计每个字符的连续长度 char[] s=ss.toCharArray(); groups=new ArrayList[26]; Arrays.setAll(groups,_->new ArrayList<>()); int count=0; for(int i=0;i<s.length;i++){ count++; if(i+1==s.length||s[i]!=s[i+1]){ //把这一段的长度添加进去 groups[s[i]-'a'].add(count); //重新计数 count=0; } } //二分框架 int left=0,right=s.length; while(left<right){ int mid=left+(right-left+1)/2; if(check(mid)) right=mid-1; else left=mid; } //如果所有都不能凑出就返回-1 return check(left)?-1:left; } //判断能否存在某个字符,能凑出至少3个长度为mid的相同子串 //若不能凑出,则返回true向左调整mid private boolean check(int mid){ if(mid==0) return true; //遍历每个小写字母,看看每段的长度能否凑出来 for(List<Integer> word:groups){ //该字符无连续段,直接跳过 if(word.isEmpty()) continue; //统计该字符当前段能凑出mid长度子串的总数 int sum=0; for(int l:word){ if(l<mid) continue; sum+=l+1-mid;//累加该段的贡献量 if(sum>=3) return false; } } return true; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/28 18:14:30

AI Agent革命:从“嘴炮王“到“行动派“的效率跨越

文章探讨了AI从"会说话"到"会干活"的革命性跨越&#xff0c;介绍了AI Agent相比传统LLM的三大优势&#xff1a;记忆能力、工具使用能力和目标驱动执行力。重点讲解了MCP协议如何解决API对接问题&#xff0c;以及Agent to Agent协作模式的专业分工力量。通过…

作者头像 李华
网站建设 2026/5/28 7:02:23

惊!汉阳天玑AIGEO优化系统代理机会别错过!

在数字化营销的浪潮中&#xff0c;天玑AIGEO优化系统领域已成为众多企业发展的关键着力点&#xff0c;但当前该领域也面临着诸多技术挑战&#xff0c;天玑AI互联网中心的出现&#xff0c;为解决这些问题带来了新的方案。行业痛点分析当前天玑AIGEO优化系统领域存在着精准营销难…

作者头像 李华
网站建设 2026/5/28 19:11:03

深入解析C4模型与ArchiMate:企业架构可视化中的选择与融合

在现代软件开发与企业架构实践中&#xff0c;可视化工具已成为连接业务与技术、促进跨团队协作的关键手段。然而&#xff0c;面对众多建模语言和框架&#xff0c;如何为不同场景选择合适的架构表达方式&#xff0c;是每一位架构师、产品经理和开发团队都必须面对的问题。本文将…

作者头像 李华
网站建设 2026/5/28 18:14:36

XTOM蓝光三维扫描仪用于自由曲面微尺寸共性电路的增材制造

近年来&#xff0c;集成在曲面的共形电子电路因其在健康监测与诊断、运动传感、可穿戴设备、天线以及光电子器件等领域的广泛应用而备受关注。增材制造技术能够接在曲面上打印&#xff0c;为电路设计提供了更大的灵活性&#xff0c;并能更好地适应复杂的表面拓扑结构。采用创新…

作者头像 李华
网站建设 2026/5/23 15:04:13

Python计算机毕设之基于python+Django多媒体资料管理系统基于python的媒体资源管理系统设计与实现(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/5/27 2:47:45

【课程设计/毕业设计】基于Python的个人身心健康管理系统健康档案心理咨询预约基于Python的个人身心健康管理系统【附源码、数据库、万字文档】

java毕业设计-基于springboot的(源码LW部署文档全bao远程调试代码讲解等) 博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、…

作者头像 李华