【Leetcode Daily】2730找到最长的半重复子字符串
发表于|更新于|力扣日常 | LeetcodeDaily
|总字数:276|阅读时长:1分钟|浏览量:
题目浅析
想查看原题可以点击题目链接。
简单地说,就是给一个由 0 和 1 组成的字符串,现在找到其中最长连续子字符串的长度,要求字符串中间没有超过一个的相邻重复数字的情况。
思路分享
- 经典不定长滑动窗口一则(【Leetcode Daily】3090每个字符最多出现两次的最长字符串),不过本题有一点需要注意的是,判断相邻重复数字后的 left 指针的位置要清楚。如果像陆爻齐一样,left 判断完都会 ++ 那么就与灵茶山艾府的解法没那么一样,不能直接用 i-left+1,毕竟 left 其实一直在左窗口+1的位置上。
代码解答(强烈建议自行解答后再看)
1 | class Solution { |
文章作者: 陆爻齐-LuYaoQi
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 LuYaoQi's Blogs!
相关推荐

2025-05-08
【Leetcode Daily】1004最大连续1的个数III
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个由 0 和 1 组成的整数数组,现在最多可以把其中 k 个 0 反转成 1。求反转后最长连续 1 的个数。 思路分享 纯粹的不定长滑动窗口(【Leetcode Daily】3090每个字符最多出现两次的最长字符串),无需多盐。 代码解答(强烈建议自行解答后再看) 陆爻齐的解法 1234567891011121314151617class Solution {public: int longestOnes(vector<int>& nums, int k) { int zero_count = 0; int left = 0; int n = nums.size(); int ans = 0; for (int i = 0; i < n;i++) { zero_count += 1-nums[i]; while(zero_count...

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-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...

2025-05-16
【Leetcode Daily】1234替换子串得到平衡字符串
题目浅析 想查看原题可以点击题目链接。 简单地说,给一个由 QWER 四个字母组成的字符串,可以变换其中的子字符串,使得四个字母数量相同,求变换的子字符串的最短长度。 思路分享 不定长滑动窗口的求“至少”应用,思路上基本同【Leetcode Daily】3090每个字符最多出现两次的最长字符串,下面主要讲讲灵茶山艾府在题解中可以借鉴的地方。 https://leetcode.cn/problems/replace-the-substring-for-balanced-string/solutions/2108358/tong-xiang-shuang-zhi-zhen-hua-dong-chua-z7tu/ 一个是数组的初始化,由于 ASCII 码的对应,其实用字符初始化数组数量是可以的,所以就有了int...

2025-05-30
【Leetcode Daily】1248统计优美子数组
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个整数数组和一个整数 k,要求其中所有子数组的数量,不过子数组需要满足一个条件,即其中的奇数的个数恰好为 k。 思路分享 和【Leetcode Daily】930和相同的二元子数组类似的恰好型不定长滑动窗口,不过本题让陆爻齐更深入的思考,越长越合法的左指针的意义。 “众”所周知,我们灵神派的越长越合法类型的解法,是通过累计窗口左指针数值之和计算得出,其意义,除了充当窗口的左侧边界,实质意义可以理解为,窗口左侧满足条件的情况数目,而窗口本身是在遍历右指针情况,这样一来就算是统计了所有情况。 拿第一次满足条件的窗口举例,此时,窗口的左侧还在起点,下标为 0,示意着此前没有满足条件的情况,进入中间的循环,循环的作用是找出不满足条件的边界;如果第一个元素(下标为 0 的那个)恰好是窗口需要的元素,那么左指针右移一步后,因窗口不符合条件而终止循环,此时左指针下标为...

2025-05-19
【Leetcode Daily】1358包含所有三种字符的子字符串数目
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个字符串,由 a b c 组成,找出其中所有至少包含a b c各一个的子字符串。 思路分享 不定长滑动窗口变式,变在“至少”,也就是说,一旦找到一个合适的窗口,就是一个合适的窗口右端点,窗口左侧一直往左都是答案,所以最终计算答案时,直接看包含 a b c 至少各一个的最短窗口的左端数值之和。 不过具体判断窗口是否满足条件,除了直接计算对三个字母的记录是否都非零外,也可以引入另一个变量统计当前字母为零的个数,看起来更快,但实际上差别不大,复杂度都是O(1)。 代码解答(强烈建议自行解答后再看) 参考题解 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061class Solution {public: int numberOfSubstrings(string s) { int...
公告
希望你我都能得偿所愿
PS:相对流水账的文章只能在归档找得到
系列文章
