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

LeetCode[459]重复的子字符串(KMP解法)

思路:

最近迷上了KMP算法,所以这道题也是来搞一下KMP算法,总所周知KMP是需要维护一个前缀表,KMP算法不是比较一个字符串包不包含另一个字符串的吗,这个重复字符串的题也能用?猫爷:毋庸置疑!

前缀:不包含后缀的字符串

后缀:不包含前缀的字符串

我模拟的前缀表就是从0开始的,没有什么右移, -1啊什么的,就是普普通通的前缀表。

前缀表的最后一个位置就是当前字符串的最长前后缀,如果字符串是由重复字符串构成的,那么字符串长度减去最长前后缀的长度,即剩余子串的长度,如果总长度%子串长度等于0,那么这就是重复的子字符串。

这个也不太好讲,大家理解KMP算法之后画个图就明白了,或者去代码随想录去看视频

总结一下,就是先维护一共前后缀表,然后通过这个表来求解

代码:

 

class Solution {public boolean repeatedSubstringPattern(String s) {int n = s.length();int[] next = new int[s.length()];int j = 0;next[0] = 0;for (int i = 1; i < n; i++) {while (j > 0 && s.charAt(i) != s.charAt(j)) {j = next[j - 1];}if (s.charAt(i) == s.charAt(j)) {j++;}next[i] = j;}if (next[n - 1] > 0 && n % (n - next[n - 1]) == 0) {return true;} else {return false;}}
}

相关文章:

  • 聊聊Spring AI Alibaba的ElasticsearchDocumentReader
  • opencv图像旋转(单点旋转的原理)
  • linux oracle 19c 静默安装
  • 使用Redis实现实时排行榜
  • Redis(持久化)
  • Gradle与Idea整合
  • python(八)-数据类型转换
  • Vue3 + Three.js 场景编辑器开发实践
  • JAVA学习-多线程
  • 【云馨AI-大模型】2025年4月第三周AI领域全景观察:硬件革命、生态博弈与国产化突围
  • Linux:基础IO---动静态库
  • Python爬虫实战:获取B站查询数据
  • 【一起学Rust】使用Thunk工具链实现Rust应用对Windows XP/7的兼容性适配实战
  • 车载诊断新架构--- SOVD初入门(上)
  • 数据库基础-B+树
  • (二)Trae 配置C++ 编译
  • 少儿编程路线规划
  • 什么是零缺陷质量管理?
  • PHP怎样判断浏览器类型和浏览器语言?
  • CF1016赛后总结
  • 市民建议公交广播增加“请勿大声喧哗”提示,上海交通委回复
  • 针灸学专家夏玉清逝世,20岁时奔赴抗美援朝战场救护伤员
  • 学习时报头版评论:历史的车轮不会倒退
  • “青创齐聚世博行 同心筑梦引领区”青创上海-2025浦东徒步行后天启程
  • 国防部:民进党当局对美国人予取予求祸害台湾民生
  • 马上评|守一扇心窗,护绿苗成长