【代码随想录算法训练营Day09】28.实现 strStr(); 459.重复的子字符串

本文主要是介绍【代码随想录算法训练营Day09】28.实现 strStr(); 459.重复的子字符串,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • Day 9 第四章 字符串part02
    • 28. 实现 strStr() (本题可以跳过)
      • KMP 思路
      • KMP 代码
    • 459.重复的子字符串 (本题可以跳过)
    • 字符串总结
    • 双指针回顾

Day 9 第四章 字符串part02

  • 今日任务
    • 28.实现 strStr(); 459.重复的子字符串; 字符串总结; 双指针回顾

28. 实现 strStr() (本题可以跳过)

  • 因为KMP算法很难,大家别奢求 一次就把kmp全理解了,大家刚学KMP一定会有各种各样的疑问,先留着,别期望立刻啃明白,第一遍了解大概思路,二刷的时候,再看KMP会
    好懂很多。
  • 或者说大家可以放弃一刷可以不看KMP,今天来回顾一下之前的算法题目就可以。
  • 因为大家 算法能力还没到,细扣 很难的算法,会把自己绕进去,就算别人给解释,只会激发出更多的问题和疑惑。所以大家先了解大体过程,知道这么回事, 等自己有
    算法基础和思维了,在看多看几遍视频,慢慢就理解了。
  • 题目链接:https://leetcode.cn/problems/find-the-index-of-the-first-occurrence-in-a-string/
  • 视频讲解:1. 帮你把KMP算法学个通透!(理论篇); 2. 帮你把KMP算法学个通透!(求next数组代码篇)_哔哩哔哩_bilibili
  • 文章讲解:https://programmercarl.com/0028.%E5%AE%9E%E7%8E%B0strStr.html
  • 参考视频:https://b23.tv/2Px1QbL

KMP 思路

KMP 代码

public static int strStr(String haystack, String needle) {char origin[] = haystack.toCharArray(); //原始数组char pattern[] = needle.toCharArray();  //模式数组int next[] = next(pattern); //最长前后缀数组//System.out.println(Arrays.toString(next));/*1. 匹配成功,i++ j++,直到j==模式字符串长度2. 匹配失败j != 0 跳过最长前后缀字符,继续匹配j == 0 则 i++*/int i = 0;int j = 0;//没匹配到就一直匹配,直到模式字符串尾部和原始字符串对齐while(pattern.length - j <= origin.length - i){if(origin[i] == pattern[j]){    //匹配成功的情况i ++;j ++;} else if (j == 0) {i++;} else{j = next[j - 1];}//找到解if(j == pattern.length) return i - j;}return -1;
}/*最长前后缀数组:只跟模式字符串有关1. 索引:使用了模式字符串前j个字符串-12。 值:最长前后缀的长度(恰好是匹配失败时j要跳转的位置)*/
public static int[] next(char[] pattern){//return new int[]{0,0,1,2,3,0,1};int next[] = new int[pattern.length];int i = 1;int j = 0;/*遇到相同的字符:记录共同前后缀长度,长度即为 j + 1长度记录至数组i索引处然后i++ j++遇到不同字符:1. 前面没有共同部分:j=02. 前面有共同部分,j向回找无需对比的地方,可以跳过无需对比的字符串个数之前已经计算过*/while(i < pattern.length){if(pattern[i] == pattern[j]){next[i] = j + 1;i ++;j ++;}else if(j == 0){i ++;}else{j = next[j - 1];}}return next;
}

459.重复的子字符串 (本题可以跳过)

  • 本题算是KMP算法的一个应用,不过 对KMP了解不够熟练的话,理解本题就难很多。
  • 我的建议是 KMP和本题,一刷的时候 ,可以适当放过,了解怎么回事就行,二刷的时候再来硬啃
  • 题目链接:https://leetcode.cn/problems/repeated-substring-pattern/
  • 视频讲解:https://www.bilibili.com/video/BV1cg41127fw/
  • 文章讲解:https://programmercarl.com/0459.%E9%87%8D%E5%A4%8D%E7%9A%84%E5%AD%90%E5%AD%97%E7%AC%A6%E4%B8%B2.html

暂时跳过

字符串总结

  • 比较简单,大家读一遍就行
  • 文章讲解:https://programmercarl.com/%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%80%BB%E7%BB%93.html

双指针回顾

  • 此时我们已经做过10到双指针的题目了,来一起回顾一下,大家自己也总结一下双指针的心得
  • 文章讲解:https://programmercarl.com/%E5%8F%8C%E6%8C%87%E9%92%88%E6%80%BB%E7%BB%93.html

这篇关于【代码随想录算法训练营Day09】28.实现 strStr(); 459.重复的子字符串的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/737225

相关文章

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3

Java实现删除文件中的指定内容

《Java实现删除文件中的指定内容》在日常开发中,经常需要对文本文件进行批量处理,其中,删除文件中指定内容是最常见的需求之一,下面我们就来看看如何使用java实现删除文件中的指定内容吧... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细介绍3.1 Ja

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

PostgreSQL中MVCC 机制的实现

《PostgreSQL中MVCC机制的实现》本文主要介绍了PostgreSQL中MVCC机制的实现,通过多版本数据存储、快照隔离和事务ID管理实现高并发读写,具有一定的参考价值,感兴趣的可以了解一下... 目录一 MVCC 基本原理python1.1 MVCC 核心概念1.2 与传统锁机制对比二 Postg

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取