网站首页 > 博客文章 正文
题目
如果字符串中的所有字符都相同,那么这个字符串是单字符重复的字符串。
给你一个字符串 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题目,使用滑动窗口
猜你喜欢
- 2025-07-06 重要账户密码总是被盗|密码长度与强度怎样设置才最安全
- 2025-07-06 GET请求中URL的最大长度限制总结,读完之后,大部分程序员收藏了
- 2025-07-06 删除字符串的指定字符(删去字符串中指定字符)
- 2025-07-06 Twitter计划3月前将推文的长度扩展至一万字符
- 2025-07-06 Excel提取文本指定位置长度的函数和插件操作法
- 2025-07-06 Excel高级分列按固定字符长度进行文本拆分
- 2025-07-06 谈谈表单设计的一些细节(表单设计要点)
- 2025-07-06 一位女兵深情地呼唤“烈士们归队吧”
- 2025-07-06 字符串中删除指定长度及根据固定字符删除
- 2025-07-06 Rust字符串:String、&str、&String与字符串切片的精髓
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)