网站首页 > 文章精选 正文
题目
如果字符串中的所有字符都相同,那么这个字符串是单字符重复的字符串。
给你一个字符串 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 && text[i] == text[j+countB] {
countB++
}
// 2种情况
// 1、a...axa...ay..a 可以拿1个来补齐:+1
// 2、没有多余的补齐,可以拿第二段右侧最后一个点或者第一段左侧第一个点来补:+0
total := min(countA+countB+1, arr[v]) // 取较少的
res = max(res, total) // 更新结果
i = i + countA // 窗口后移
}
return res
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
func min(a, b int) int {
if a > b {
return b
}
return a
}
总结
Medium题目,使用滑动窗口
- 上一篇: Python最长子字符串的长度
- 下一篇: Excel办公技巧:如何按文本长度对数据区域进行排序?
猜你喜欢
- 2025-04-26 Java笔试题目-获取最长不含重复子串的长度
- 2025-04-26 八卦的符号及其涵义:
- 2025-04-26 西门子PLC之间S7通讯的技巧和经验
- 2025-04-26 聊聊字符集编码与数据压缩
- 2025-04-26 MYSQL有哪些数据类型
- 2025-04-26 散列算法比较:MD5、SHA1、SHA256有哪些区别
- 2025-04-26 慢 SQL 分析与优化
- 2025-04-26 分列出长度各异的一列字符串的最后一位,Excel 补上了这个功能
- 2025-04-26 CHAR与VARCHAR详解
- 2025-04-26 Python 实现【找出经过特定点的路径长度】
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)