这里写目录标题
- 3. 无重复字符的最长子串
- 438. 找到字符串中所有字母异位词
3. 无重复字符的最长子串
- 左右指针
- left和right里面的字符串一直是没有重复的
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
# 左右指针
left=right=0
ans=0#初始化结果
table=collections.defaultdict(int)
for right,char in enumerate(s):#left和right里面的字符串一直是没有重复的
table[char]+=1
while table[char]>1:#持续循环
table[s[left]]-=1
left+=1
ans=max(ans,right-left+1)
return ans
438. 找到字符串中所有字母异位词
题目:给定两个字符串 s和p,找到 s 中所有 p 的异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。异位词指由相同字母重排列形成的字符串(包括相同的字符串)。
class Solution:
def findAnagrams(self, s: str, p: str) -> List[int]:
from collections import defaultdict
len_p,len_s=len(p),len(s)
table_p,table_s=defaultdict(int),defaultdict(int)
if len_s<len_p:
return []
for char in p:
table_p[char]+=1
for i in range(len_p):
table_s[s[i]]+=1
res=[]
if table_p==table_s:
res.append(0)
for i in range(len_p,len_s):
table_s[s[i]]+=1
table_s[s[i-len_p]]-=1
if table_s[s[i - len_p]] == 0:
del table_s[s[i - len_p]]
if table_p==table_s:
res.append(i-len_p+1)
return res