描述
定义重复字符串是由两个相同的字符串首尾拼接而成,例如 abcabc 便是长度为6的一个重复字符串,而 则不存在重复字符串。
给定一个字符串,请返回其最长重复子串的长度。
若不存在任何重复字符子串,则返回 0 。
数据范围:
字符串长度不大于 2 \times 10^42×104
示例1
输入:
"ababc"
复制返回值:
4
复制说明:
abab为最长的重复字符子串,长度为4
示例2
输入:
"abcab"
复制返回值:
0
复制说明:
该字符串没有重复字符子串
滑动窗口
子串问题一般都是用滑动窗口解决,这里就是一个典型的例子,
- 我们先将字符串从中间分开,看成两个连续的窗口,最大窗口的长度是字符串长度的一半,
- 函数比较窗口中的内容是否相等,如果相等,返回true,此时的最长重复子串长度等于一个窗口的长度的两倍,即2*i;否则继续移动窗口,移动步数的边界是字符串长度减去此时的两个窗口长度;
- 在这一层窗口长度中找不到重复子串