【Leetcode Daily】3325字符至少出现K次的子字符串
发表于|更新于|力扣日常 | LeetcodeDaily
|总字数:359|阅读时长:1分钟|浏览量:
题目浅析
想查看原题可以点击题目链接。
简单地说,就是给一个小写字母字符串以及一个数字 K,要求给出其中所有子字符串,每个字符串至少有一个字母的个数不小于 K。
思路分享
越长越合法类型的不定长滑动窗口(【Leetcode Daily】1358包含所有三种字符的子字符串数目)
这里就稍微再解释下所谓的“越长越合法”罢,毕竟也是今天看了题解,突然有所感悟。这句话就是所得答案长度越长的情况下,往往是合法的。拿本题第一个输入举例。
输入:“s = “abacb”, k = 2”;输出:“4”
如果窗口内现在是 aba,那么肯定是符合条件的,所以窗口左部滑动后,窗口内容变成 ba,在下一循环变成 bac 时,答案也加上一,原因就是“越长越合法”,即把之前合法的情况和现在的窗口拼一起算上了。
代码解答(强烈建议自行解答后再看)
- 参考题解
1 | class Solution { |
文章作者: 陆爻齐-LuYaoQi
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 LuYaoQi's Blogs!
相关推荐

2025-04-24
【Leetcode Daily】1052爱生气的书店老板
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给两个整型数组,以及一个整数 minutes,按某个要求(具体看原题,难以简化),求一个数组在另一个数组和 minutes 约束下的求的最大值。 思路分享 陆爻齐的思路是计算窗口内(也就是冷静的分钟)不满意生气离开的最大值,加上不生气的心情值,再减去所有生气离开的数值得出答案,但由于思想复杂了点,所以略微修改模板结构,也就是下面陆爻齐的答案。 参照灵茶山艾府,其实只要区分开两部分相加即可,然后直接参照模板。这两部分,一个是不生气的值,一个是生气下的值,取生气下最大值即可。这样就不用像上面一样多一次运算。 https://leetcode.cn/problems/grumpy-bookstore-owner/solutions/2751888/ding-chang-hua-dong-chuang-kou-fu-ti-dan-rch7/ 代码解答(强烈建议自行解答后再看) 陆爻齐的解法 12345678910111213141516171819202122232425class Solution...

2025-05-05
【Leetcode Daily】1493删掉一个元素以后全为1的最长子数组
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个由 0 和 1 组成的数组,现在需要从中删除一个元素,求删除后只含 1 的最长子数组长度。 思路分享 除了不定长滑动窗口模板的内容(【Leetcode Daily】3090每个字符最多出现两次的最长字符串),本题只有一点需要特别注意,那就是必须要删除一个字符的需求。 由于这个需求的存在,会造成一种情况,如果子串内没有 0,也必须删除一个字符,而如果子串内有一个 0,那就删除 0 来获取长度。所以可以发现,无论是什么情况,最后求得的结果都要减一。 代码解答(强烈建议自行解答后再看) 陆爻齐的解法 12345678910111213141516171819202122class Solution {public: int longestSubarray(vector<int>& nums) { int zero_count = 0; int left = 0; int n = nums.size(); int...

2025-04-22
【Leetcode Daily】2461长度为K子数组中的最大和
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个整型数组和一个数字 K,要求一个长度为 K 且内部数字各不相同的子数组之和的最大值。 思路分享 就是上一题(【Leetcode Daily】2841几乎唯一子数组的最大和)把不相同数字固定为 k 的改版,直接用模板(【Leetcode Daily】1456定长子串中元音的最大数目)写过,也就是下面的陆爻齐解法。 代码解答(强烈建议自行解答后再看) 陆爻齐解法 12345678910111213141516171819202122232425262728293031class Solution {public: long long maximumSubarraySum(vector<int>& nums, int k) { unordered_map<int, int> rec_num; long long res = 0; long long cur_sum = 0; int type_count...

2025-05-04
【Leetcode Daily】3090每个字符最多出现两次的最长字符串
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个字符串,求里面子串的最长长度,该子串需要每个字母不超过两个。 思路分享 不定长滑动窗口,在这里正式引入灵神的模板,也就是循环扩大窗口右侧,当条件不满足时,让窗口左侧右移,直到满足条件。 https://leetcode.cn/problems/maximum-length-substring-with-two-occurrences/solutions/2704776/on-hua-dong-chuang-kou-pythonjavacgo-by-hl44d/ 简单地把2改成1就能用在上一题上力,就是 【Leetcode Daily】3无重复字符的最长子串。 代码解答(强烈建议自行解答后再看) 参考灵神的模板答案 123456789101112131415161718class Solution {public: int maximumLengthSubstring(string s) { vector<int> rec(26, 0); ...

2025-05-03
【Leetcode Daily】3无重复字符的最长子串
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个字符串,该字符串由字母、数字、符号和空格组成,求其中无重复字符的最长子串。 思路分享 这是不定长滑动窗口的开题!不过灵神并没有给出模板题解,所以陆爻齐参照着官方题解试着总结一下模板。 哦对,像这种求无重复字符的,如果字符比较特殊,比如本题的字符范围显然就是 ASCII 表,就可以直接用一个长度为 128 的数组记录,相比 unordered_set 方便快捷一点。 先想想暴力,直接两层遍历子串的各种组合,第三层检查是否重复,这过于暴力了。 相比之下,不定长滑动窗口确实高效不少。滑动窗口本质上就可以视为窗口左边和右边的变化,习惯上可以先移动右边,直到再移动窗口内不符合条件,再记录结果(比如本题记录最长的窗口长度即可),接着移动窗口左边,直到窗口内符合条件(这里移动左边不需要单独循环,原因可以看参考代码),再移动窗口右边,重复至尽。 代码解答(强烈建议自行解答后再看) 参考着官方题解写的代码 12345678910111213141516171819202122class Solution...

2025-05-06
【Leetcode Daily】1208尽可能使字符串相等
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给两个字符串,和一个整数变量,求一个最长字符串的长度,使得一个字符串变换为另一个(ASCII码差值),变换的总值在那个整数之内。 思路分享 典型的不定长滑动窗口(【Leetcode Daily】3090每个字符最多出现两次的最长字符串,无需多盐 代码解答(强烈建议自行解答后再看) 陆爻齐的解法 123456789101112131415161718class Solution {public: int equalSubstring(string s, string t, int maxCost) { int curCost = 0; int left = 0; int n = t.size(); int ans = 0; for (int i = 0; i < n; i++) { curCost += abs(s[i]-t[i]); if (curCost...
公告
不定时更新,记录所学所想
系列文章