91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

LeetCode中怎么替換后的最長重復字符串

發布時間:2021-08-02 15:51:13 來源:億速云 閱讀:235 作者:Leah 欄目:大數據

LeetCode中怎么替換后的最長重復字符串,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

題目描述:

給你一個僅由大寫英文字母組成的字符串,你可以將任意位置上的字符替換成另外的字符,總共可最多替換 k 次。在執行上述操作后,找到包含重復字母的最長子串的長度。

注意:字符串長度 和 k 不會超過 10^4。

 

示例 1:

輸入:s = "ABAB", k = 2
輸出:4
解釋:用兩個'A'替換為兩個'B',反之亦然。

 

示例 2:

輸入:s = "AABABBA", k = 1
輸出:4
解釋:
將中間的一個'A'替換為'B',字符串變為 "AABBBBA"。
子串 "BBBB" 有最長重復字母, 答案為 4

 

思路分析:

一看到最長字符串就想到滑動窗口。

 

算法流程:

  • 右邊界先移動找到一個滿足題意的可以替換 k 個字符以后,所有字符都變成一樣的當前看來最長的子串,直到右邊界納入一個字符以后,不能滿足的時候停下;
  • 然后考慮左邊界向右移動,左邊界只須要向右移動一格以后,右邊界就又可以開始向右移動了,繼續嘗試找到更長的目標子串;
  • 替換后的最長重復子串就產生在右邊界、左邊界交替向右移動的過程中。
class Solution:
    def characterReplacement(self, s: str, k: int) -> int:
        from collections import defaultdict
        d = defaultdict(int)
        l = 0
        maxn = 0
        for r in range(len(s)):
            d[s[r]] += 1
            maxn = max(maxn, d[s[r]])
            if r - l + 1 > maxn + k:  # bc it is for loop, r += 1 is later than if clause
                d[s[l]] -= 1
                l += 1
        return len(s) - l
 
class Solution {
    public int characterReplacement(String s, int k) {
        int len=s.length();
        if(len<2){
            return len;
        }
        char[] chararray=s.toCharArray();
        int left=0,right=0;
        int maxCount=0,res=0;
        int[] freq = new int[26];
        while(right<len){
            freq[chararray[right]-'A']++;
            maxCount=Math.max(maxCount,freq[chararray[right]-'A']);
            right++;
            if(right-left>maxCount+k){
                freq[chararray[left]-'A']--;
                left++;
            }
            res=Math.max(res,right-left);
            
        }
        return res;
    }
}

看完上述內容,你們掌握LeetCode中怎么替換后的最長重復字符串的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

正宁县| 中卫市| 福州市| 凤庆县| 邹平县| 商南县| 大厂| 忻州市| 南汇区| 徐闻县| 安化县| 沙坪坝区| 安陆市| 罗源县| 沭阳县| 泰宁县| 金坛市| 清河县| 南溪县| 阿尔山市| 前郭尔| 丹江口市| 黑山县| 江油市| 梅河口市| 炉霍县| 长海县| 文登市| 福贡县| 金湖县| 麻城市| 九龙县| 仲巴县| 北流市| 边坝县| 柳江县| 连州市| 雅江县| 泰和县| 洪洞县| 汉阴县|