心路历程:
字符串中的重复字串问题,第一反应就是双指针or暴力搜索。实际上这两种做法也都可以。
注意的点:
1、注意字串的长度要在索引差的基础上+1
2、双指针的时候注意保证fast > slow
3、暴力搜索需要剪枝,当以s[i]开头的字串有重复元素时,后面的不需要遍历了(break退出第一层循环)
解法:
暴力+剪枝解法:
python
# 暴力+剪枝
n = len(s)
max_len = 1
if not s:
return 0
for i in range(n):
for j in range(i+1, n):
if j-i + 1 == len(list(set(s[i:j+1]))):
max_len = max(max_len, j-i+1)
else:
break
return max_len
双指针解法:
python
# 双指针做法
n = len(s)
slow, fast = 0, 1
if n <= 1:
return n
max_l = 1
while fast < n:
if len(set(s[slow:fast+1])) == fast - slow + 1:
max_l = max(max_l, fast-slow+1)
fast += 1
else:
slow += 1
return max_l