对于substring这种字眼:
考虑滑动窗口,因为每个substring必须是连续,中间不能断开。
从起始开始找,用 j 去表示每个新找的元素,用 i 表示符合标准的开头。
e.g: LeetCode 3: Longest Substring Without Repeating Characters
num = dict() i = 0 , j = 0, answer = 0
while( i < len(s) and j < len(s) ):
if s[j] not in num:
num[s[j]] = 1
j += 1 #寻找下一个字符
answer = max( answer, j-i ) # j - i 为当前满足条件的子串长度
else:
num.pop(s[i]) #如果 j 当前的字符不满足条件,则从 i 开始删除字符,j 不变 不往下找
i += 1 #查看删除之前 第 i 个字符后 是否满足条件, 因为 j 没有往前走
return answer
滑动窗口的核心就是 窗口起始和末端位置的元素滑动。
answer = max( answer , new_answer) 记录每次的答案 记住这种写法
二、找子串
LeetCode 14
别忘记了用str.index() str.substring() in java
e.g:找最长prefix 就是 prefix = str[0] str.index(0,len(prefix)-1)