题目
如果字符串中的所有字符都相同,那么这个字符串是单字符重复的字符串。
给你一个字符串 text,你只能交换其中两个字符一次或者什么都不做,然后得到一些单字符重复的子串。返回其中最长的子串的长度。
示例 1:输入:text = "ababa" 输出:3
示例 2:输入:text = "aaabaaa" 输出:6
示例 3:输入:text = "aaabbaaa" 输出:4
示例 4:输入:text = "aaaaa" 输出:5
示例 5:输入:text = "abcdef" 输出:1
提示:1 <= text.length <= 20000
text 仅由小写英文字母组成。
解题思路分析
1、滑动窗口;时间复杂度O(n),空间复杂度O(1)
func maxRepOpt1(text string) int {
res := 0
n := len(text)
arr := [26]int{}
for i := 0; i < n; i++ {
v := int(text[i] - 'a')
arr[v]++ // 统计每个字母出现的次数
}
for i := 0; i < n; {
v := int(text[i] - 'a')
countA := 0 // 统计相同的个数
for i+countA < n && text[i] == text[i+countA] {
countA++
}
j := i + countA + 1
countB := 0 // 统计相隔1个不同字符往后连续的次数
for j+countB < n texti='= text[j+countB]' countb 2 1a...axa...ay..a 1:1 2:0 total :='min(countA+countB+1,' arrv res='max(res,' total i='i' counta return res func maxa b int int if a> b {
return a
}
return b
}
func min(a, b int) int {
if a > b {
return b
}
return a
}
总结
Medium题目,使用滑动窗口