
滑动窗口算法
文章平均质量分 50
leetcode—最小覆盖子串、字符串排列、找所有字母异位词、最长无重复子串
码了三年又三年
一个Java程序员
展开
-
【算法】滑动窗口代码模板
这个算法的时间复杂度是O(N),比字符串暴力算法要高效得多。其中两处 sout 表示更新窗口数据的地方,直接往里面填具体逻辑就行了。而且,这两处操作分别是右移和左移窗口更新操作,它们的操作是完全对称的。滑动窗口算法技巧的思路非常简单,就是维护一个窗口,不断滑动,然后更新答案。原创 2024-09-14 13:35:24 · 394 阅读 · 0 评论 -
【算法】 滑动窗口—最长无重复子串
我们要的是最长无重复子串,哪一个阶段可以保证窗口中的字符是没有重复的呢?这里和之前不一样,要在收缩窗口完成后更新 res,因为窗口收缩的 while 条件是存在重复元素,换句话说收缩完成后一定保证窗口中没有重复。比如,输入 s = "aabab",算法返回2,因为无重复的最长子串是 "ab" 或者 "ba",长度为2。当 window[c] 值大于1时,说明窗口中存在重复字符,不符合条件,就该移动 left 缩小窗口了。输入一个字符串 s,请计算 s 中不包含重复字符的最长子串长度。原创 2024-09-15 01:08:46 · 370 阅读 · 0 评论 -
【算法】滑动窗口—找所有字母异位词
比如输入 S = "cbaebabacd",T = "abc",算法返回 [0,6],因为 S 中有两个子串 "cba" 和 "bac" 是 T 的排列,它们的起始索引是0和6。给定一个字符串 S 和一个非空字符串 T,找到 S 中所有是 T 的字母异位词的子串,返回这些子串的起始索引。所谓的字母异位词,其实就是全排列,原题目相当于让你找 S 中所有 T 的排列,并返回它们。和寻找字符串的排列一样,只是找到一个合法异位词(排列)之后将起始索引加入 res 即可。原创 2024-09-15 00:41:17 · 369 阅读 · 0 评论 -
【算法】滑动窗口—字符串的排列
比如输入 S = "helloworld",T = "oow",算法返回 True,因为 S 包含一个子串 "owo" 是 T 的排列。输入两个字符串 S 和 T,请你用算法判断 S 是否包含 T 的排列,也就是要判断 S 中是否存在一个子串 是 T 的一种全排列。这明显是关于滑动窗口算法的题目,原创 2024-09-14 22:28:16 · 358 阅读 · 0 评论 -
【算法】滑动窗口—最小覆盖子串
最小覆盖子串“问题,难度为Hard,题目如下:给你两个字符串 S 和 T,请你。如果 S 中没有这样一个子串,则算法返回空串,如果存在这样一个子串,则可以认为答案是唯一的。比如输入 S = "ADBECFEBANC",T = "ABC",算法应该返回 "BANC"。思路很简单,但显然不是我们想要的。原创 2024-09-14 20:22:35 · 1367 阅读 · 0 评论