参考自 代码随想录

Java、Python的String字符串是不可变的

【参考:java 字符串 复制_Java字符串复制_cunchi4221的博客-CSDN博客】
请注意,对于任何不可变的对象,我们都可以将一个变量直接分配(b=a)给另一个变量。 它不仅限于String对象。
但是,如果要将可变对象复制到另一个变量,则应执行Deep copy 。

KMP

实例:28. 实现 strStr - 力扣(LeetCode)

参考:有限状态机之 KMP 字符匹配算法 :: labuladong的算法小抄

用一个二维的 dp 数组(但空间复杂度还是 O(M)),重新定义其中元素的含义.


视频必看

参考:帮你把KMP算法学个通透!(理论篇)_哔哩哔哩_bilibili
参考:帮你把KMP算法学个通透!(求next数组代码篇)_哔哩哔哩_bilibili

前缀表不减一也不右移 容易理解

haystack为文本串, needle为模式串。

  1. 初始化:
    定义两个指针i 和 j,j 指向前缀起始位置,i 指向后缀起始位置

next[j] 就是记录着下标 j(包括j)之前的子串的最长相同前后缀长度

  1. 处理前后缀不相同的情况
    遍历模式串s的循环下标 i 要从 1开始

  2. 处理前后缀相同的情况
    那么就同时向后移动i 和j 说明找到了相同的前后缀,同时还要将j(前缀的长度)赋给next[i], 因为next[i]要记录相同前后缀的长度。

public void getNext(int[] next, String s) {int j = 0;next[0] = 0;for (int i = 1; i < s.length(); 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; }}

参考:多图预警

【leetcode】字符串(KMP、滑动窗口)相关推荐

  1. LeetCode 1839. 所有元音按顺序排布的最长子字符串(滑动窗口)

    文章目录 1. 题目 2. 解题 1. 题目 当一个字符串满足如下条件时,我们称它是 美丽的 : 所有 5 个英文元音字母('a' ,'e' ,'i' ,'o' ,'u')都必须 至少 出现一次. 这 ...

  2. 【LeetCode笔记】76. 最小覆盖子串(字符串、滑动窗口)

    文章目录 题目描述 思路 && 代码 二刷 最近一直在充电基础知识.维护 leetcode 总结博客 今天继续摸一摸新题目吧- 题目描述 感觉和 03. 无重复的最长子串 有点像,都是 ...

  3. 【LeetCode笔记】438. 找到字符串中所有字母异位词(Java、字符串、滑动窗口)

    题目描述 因为自己写的复杂度已经到了 O(n),就没有再参考题解的优化了 更新:滑动窗口方法 思路 & 代码 用一个 int[ ] count 来存储当前判断子串的各字母出现次数 getCou ...

  4. LeetCode实战:滑动窗口最大值

    题目英文 Given an array nums, there is a sliding window of size k which is moving from the very left of ...

  5. [单调栈/差分/尺取/单调队列]Exercise Week5 A最大矩形+B魔法猫+C平衡字符串+D滑动窗口

    目录 A.[单调栈]最大矩形 题意 样例 思路 总结 代码 B.[差分]TT's Magic Cat 题意 样例 思路 总结 代码 C.[尺取]平衡字符串 题意 样例 思路 总结 代码 D.[单调队列 ...

  6. leetcode算法题--滑动窗口的最大值

    原题链接:https://leetcode-cn.com/problems/hua-dong-chuang-kou-de-zui-da-zhi-lcof/ 滑动窗口: vector<int> ...

  7. LeetCode 1234. 替换子串得到平衡字符串(滑动窗口)

    1. 题目 有一个只含有 'Q', 'W', 'E', 'R' 四种字符,且长度为 n 的字符串. 假如在该字符串中,这四个字符都恰好出现 n/4 次,那么它就是一个「平衡字符串」. 给你一个这样的字 ...

  8. LeetCode解题思路—滑动窗口法

    LeetCode上的题有上千道,经常是做了后面的忘了前面的,如果能够找出这些题型的共有规律,可以事半功倍 建议将思维导图保存下来观看,或点击这里在线观看

  9. 滑动窗口—至多包含两个不同字符的最长子串(leetcode 159)

    题目描述 给定一个字符串 s ,找出 至多 包含两个不同字符的最长子串 t ,并返回该子串的长度. 示例 1: 输入: "eceba" 输出: 3 解释: t 是 "ec ...

  10. 滑动窗口—满足XX条件的最长子串

    目录 题目一:3. 无重复字符的最长子串 题目二:159. 至多包含两个不同字符的最长子串 题目三:159. 至多包含两个不同字符的最长子串 题目一:3. 无重复字符的最长子串 问题描述: 给定一个字 ...

最新文章

  1. Quake3服务器客户端架构参考
  2. VTK:可视化之Blow
  3. ABI(Application Binary Interface)
  4. JQuery快速入门-选择器
  5. C++ 数组在内存中的分配
  6. Css3之基础-5 Css 背景、渐变属性
  7. ubuntu 16.04 安装samba
  8. 腾讯区块链专利申请量排名全国第一;摩拜超20.56万单车被破坏;Nginx 1.17.7发布 | 极客头条...
  9. 在ASP.NET MVC中进行TDD开发
  10. 大数据开发笔记(四):Hive数仓调优
  11. Mac Pro 使用 ll、la、l等ls的别名命令
  12. 一个很好的makefile例子(经典)
  13. w10系统怎样打开计算机策略,Win10系统组策略在哪里打开
  14. python修改pdf内容_如何编辑pdf文件,替换其数据?
  15. iOS系统开发入门至精通学习指南
  16. nw.js html5,nw.js 如何使用?
  17. 21年杭州云栖大会参会总结-安全相关内容
  18. python鼠标监听_用Python监听鼠标和键盘事件
  19. IDEA 2021的下载与安装
  20. GMAP一款比对工具用于ALLHiC构建等位基因表

热门文章

  1. 398、Java框架52 -【Hibernate - 分页、两种获取方式】 2020.10.27
  2. API是什么?api的意思!!!
  3. 音视频直播流程及常见视频流协议介绍
  4. C/C++程序员是什么让你有如此优势?音视频开发该怎么学?
  5. JavaScript改变图片大小
  6. Android TextView 文字设置不同字体大小和颜色样式
  7. 粒子系统-烟花效果的实现
  8. 英语词根词缀记忆法(全集)_语言学习 | 英语词根词缀学习参考
  9. 用frp开源工具,实现内网穿透(详细教程)
  10. STM32H7 DMA阅读笔记