我们要在一个环形字符串中,寻找由同一字符组成的最长连续子串长度。环形的本质是首尾相连,因此可以把原串 s “展开”为 s+s 来模拟在环上跨越末尾与开头的连续段。
相关算法:线性扫描(双指针 / 跑段)。在 s+s 上从左到右扫描,维护当前连续相同字符的长度 cur
和答案 ans
。当遇到相同字符时 cur++
,否则将 cur
重置为 1。最终答案应当不超过原串长度 n,因此返回 min(ans, n)
。
实现要点:
s[i % n]
,扫描区间为 i = 1..2n-1
。小红拿到了一个环形字符串(非空串)。所谓环形字符串,即首尾相连的字符串。
小红希望截取该字符串的一段连续子串,使得该子串的所有字符都相同。
小红想知道,满足条件的连续子串长度最大是多少?
输入仅有一行,为一个仅包含小写字母的字符串。
字符串的长度不超过 200000 。
连续相同字母的子串最大长度
输入
abbcbe
输出
2
说明
取子串 "bb“ 即可。
输入
aabaa
输出
4
说明
取子串 “aaaa”,注意首尾是相连的。