微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

leetcode如何求替换后的最长重复字符

这篇文章主要介绍了leetcode如何求替换后的最长重复字符,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 次。在执行上述操作后,找到包含重复字母的最长子串的长度。

注意:
字符串长度 和 不会超过 104。

示例 1:

输入:
s = "ABAB", k = 2

输出:
4

解释:
用两个'A'替换为两个'B',反之亦然。

示例 2:

输入:
s = "AABABBA", k = 1

输出:
4

解释:
将中间的一个'A'替换为'B',字符串变为 "AABBBBA"。
子串 "BBBB" 有最长重复字母, 答案为 4。

解题思路

1,滑动窗口类题目一般都需要左右两个指针,重点放在理解和优化窗口移动的逻辑

2,注意本题是提换K个字符而不是替换K种

3,显然最大长度=窗口内出现次数最多的字符的次数+K

4,每次移动右指针,更新最大出现次数

5,如果右指针到左指针长度>K+最大出现次数则,移动左指针

func characterReplacement(s string, k int) int {    win:=make(map[byte]int)    start:=0    max:=0    maxSame:=0
   for end:=0;end<len(s);end++{        win[s[end]]++        if win[s[end]]>maxSame{            maxSame=win[s[end]]        }        for end-start+1-maxSame>k{             win[s[start]]--            start++        }         fmt.Println("*",start,end,maxSame)        if end-start+1>max{            max=end-start+1        }    }    return max}

感谢你能够认真阅读完这篇文章,希望小编分享的“leetcode如何求替换后的最长重复字符”这篇文章对大家有帮助,同时也希望大家多多支持编程之家,关注编程之家行业资讯频道,更多相关知识等着你来学习!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐