1 因为anagram是字符的不同排列,所以只需用一个dictionary来存储每个字符出现的次数,pCounter
2 用sliding window来实现
3 对s中的前len(p)-1也建立一个dictionary,sCounter
4 循环的起始值是index=len(p)-1,这是因为前len(p)-1个元素已经在dictionary中,从第len(p)开始,但是len(p)的index是len(p)-1
5 把这个元素加在sCounter中,判断pCounter与sCounter是否相等,相等的话,就返回起始index值
6 这个anagram对比完,进行下一个,则需要把sCounter中最旧的那个减1
7 当最旧的那个减到0后,删除这个元素
8 dict[s[i]],dictionary字典活得某个value的count,是用[]
二刷:
1 首先肯定要知道p中各个元素的组成情况,所以用collections.Counter()来统计
2 同时使用sliding window来做,所以最开始需要创建一个sliding window
三刷:
34/36过了
1 我的方法是每个循环里都用counter,这样其实是很耗时的,其实可以每次对counter添加一个元素来计数,会省很多时间
2 当counter的某个元素计数为0了,要把这个元素删掉