Longest Repeating Character Replacement

Difficulty: Medium
Link: https://leetcode.com/problems/longest-repeating-character-replacement/

Problem

Explanation

  • 这道题目我自己没有想到解法,是看了LeetCode上的讨论之后明白的。中心思想就是滑动窗口,通过往s[i:j]窗口中不断添加新的字符,如果符合条件则继续添加(扩大窗口的大小),而不符合条件的话,则将窗口的起始位置i + 1,即将窗口右滑。最终求的结果是连续的相同字符子串的长度,所以就如同是一个不断开的连续窗口。
  • 之前我陷入的误区,是如何替换字母,其实根本不应该去考虑去替换字符串,应该考虑最终的结果。因为最终的结果必定是子串s[i:j], i >= 0, j < s.size(),从结果考虑的话,最终符合的条件就是j - i - *max_element(alp + 65, alp + 91) <= k
    *max_element(alp + 65, alp + 91)就是在s[i:j]范围内,字母A-Z中数量最大的字符的数量,例如"AAABCC",结果就是3。取这个值的原因是:这样可以通过替换最少的字母而达到最长的重复字符子串)

cpp solution

class Solution {
public:
    int characterReplacement(string s, int k) {
        int i = 0, j = 0, alp[91] = {};
        while (j < s.length()) {
            alp[s[j++]]++;
            if ((j - i - *max_element(alp + 65, alp + 91)) > k) {
                alp[s[i++]]--;
            }
        }
        return j - i;
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,363评论 0 33
  • 计算机二级C语言上机题库(南开版) 1.m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平...
    MrSunbeam阅读 11,555评论 1 42
  • 动态规划(Dynamic Programming) 本文包括: 动态规划定义 状态转移方程 动态规划算法步骤 最长...
    廖少少阅读 8,894评论 0 18
  • 题目来源给一个字符串和一个整数k,可以变化k个字符,使得字符串中连续重复的字符数最多。我想着一个移动窗口,里面字符...
    我叫胆小我喜欢小心阅读 3,130评论 0 0
  • 冬天是安静又喧嚣的季节。 熊冬眠,鸟倦飞,树木枯萎,河水冻结,自然的声音随着冷空气一同沉降。唯独此时人之音显得更加...
    十六幺阅读 1,292评论 0 0

友情链接更多精彩内容