Day59 | 灵神 | 滑动窗口:最多K个重复元素的最长子数组&&找到最长的半重复子字符串
Day59 | 灵神 | 滑动窗口:最多K个重复元素的最长子数组&&找到最长的半重复子字符串
##2958.最多K个重复元素的最长子数组
2958. 最多 K 个重复元素的最长子数组 - 力扣(LeetCode)
思路:
和3. 无重复字符的最长子串 - 力扣(LeetCode)可以说是一模一样,可以查看我昨天的题解
无重复最长子串是这道题K等于2的情况而已
即左指针移动的条件是把右端点包含在好数组内时,右端点nums[i]代表的数字个数超过了k。那我们就移动左指针,直到固定右端点时整个子数组都满足数字个数小于等于k的条件。
完整代码:
1 | class Solution { |
2730.找到最长的半重复子字符串
2730. 找到最长的半重复子字符串 - 力扣(LeetCode)
思路:
还是和前面的思路相同,固定遍历右端点,然后根据具体条件收缩左指针。
本题左指针往后移动的条件是 在左右指针之间有一对以上的相邻字符相等。
那我们就自然而然想到拿一个变量来记录相邻字符相等的数量,如果大于1,说明满足了条件,我们应该向后移动左指针,直到左指针满足条件了为止,而怎么判断左指针满足条件该停止移动了又是新的难点。
我们先往右移动1个字符,这样就可以比较l和l-1所指的字符,如果不相等,那说明我们没有找到第一对相等的相邻字符,我们就继续往后移动,只有l和l-1相等的时候,我们才达到了左指针停止移动的条件,就是左右指针之间已经没有1对以上的相邻相等字符了。(当前第一对相等的相邻字符是l和l-1,而我们的窗口是l到r,[l,r],不包括l-1,自然也就排除了第一对相等的相邻字符)
完整代码:
1 | class Solution { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Darlingの妙妙屋!
评论