Longest Repeating Character Replacement

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

Problem

Explanation

  • 這道題目我自己沒有想到解法,是看了LeetCode上的討論之后明白的。中心思想就是滑動窗口,通過往s[i:j]窗口中不斷添加新的字符,如果符合條件則繼續(xù)添加(擴大窗口的大?。?,而不符合條件的話,則將窗口的起始位置i + 1,即將窗口右滑。最終求的結(jié)果是連續(xù)的相同字符子串的長度,所以就如同是一個不斷開的連續(xù)窗口。
  • 之前我陷入的誤區(qū),是如何替換字母,其實根本不應該去考慮去替換字符串,應該考慮最終的結(jié)果。因為最終的結(jié)果必定是子串s[i:j], i >= 0, j < s.size(),從結(jié)果考慮的話,最終符合的條件就是j - i - *max_element(alp + 65, alp + 91) <= k
    *max_element(alp + 65, alp + 91)就是在s[i:j]范圍內(nèi),字母A-Z中數(shù)量最大的字符的數(shù)量,例如"AAABCC",結(jié)果就是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;
    }
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗。 張土汪:刷leetcod...
    土汪閱讀 12,932評論 0 33
  • 計算機二級C語言上機題庫(南開版) 1.m個人的成績存放在score數(shù)組中,請編寫函數(shù)fun,它的功能是:將低于平...
    MrSunbeam閱讀 6,629評論 1 42
  • 動態(tài)規(guī)劃(Dynamic Programming) 本文包括: 動態(tài)規(guī)劃定義 狀態(tài)轉(zhuǎn)移方程 動態(tài)規(guī)劃算法步驟 最長...
    廖少少閱讀 3,663評論 0 18
  • 題目來源給一個字符串和一個整數(shù)k,可以變化k個字符,使得字符串中連續(xù)重復的字符數(shù)最多。我想著一個移動窗口,里面字符...
    我叫膽小我喜歡小心閱讀 461評論 0 0
  • 冬天是安靜又喧囂的季節(jié)。 熊冬眠,鳥倦飛,樹木枯萎,河水凍結(jié),自然的聲音隨著冷空氣一同沉降。唯獨此時人之音顯得更加...
    十六幺閱讀 174評論 0 0

友情鏈接更多精彩內(nèi)容