欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > 438. 找到字符串中所有字母异位词

438. 找到字符串中所有字母异位词

2025/9/22 23:07:34 来源:https://blog.csdn.net/huanxianxianshi/article/details/142027456  浏览:    关键词:438. 找到字符串中所有字母异位词

题目
在这里插入图片描述
思路
使用滑动窗口(所谓滑动窗口:快慢指针 如 左、右指针都先指向第一个位置 都往右移动(大概意思)):只要记住一个准则即可:滑动窗口集合=异位词集合相等,则此时找到异位词
首先 要判断 len(s)<len (p ) 若小于,则s中无异位词 如 s=‘ab’ p=‘abc’
len(s)>=len§:
1.首先用pdict、count来表示异位词集合、滑动窗口集合(每个字符所对应的个数,count集合里的字符个数默认为0) 如 p =‘abc’ 则pdict={‘a’:1,‘b’:1,‘c’:1} count={‘a’:0,‘b’:0,‘c’:0} 注意:滑动窗口集合的键是固定的(跟pdict的键一模一样)、不可添加,也不可减少
2.对于字符串s,先看以len§为长度的滑动窗口的键的值个数
3.接着 左指针从0开始,右指针从len§-1开始(原因在2),依次去遍历 移动左、右指针时,代表窗口的改变,此时要记得改变滑动窗口对应键的值
例子:
s = “cbaebabacd”, p = “abc”
pdict={‘a’:1,‘b’:1,‘c’:1} count={‘a’:0,‘b’:0,‘c’:0}
遍历s中“cba” count={‘a’:1,‘b’:1,‘c’:1} 此时:l = 0 r = 2
count ==pdict 找到异位词,首字符位置,l向右移动 r也向右移动 此时滑动窗口由cba 变为bae 即移除c 加上e ,所以 要让count中c键值-1 (不设置为0原因 预防 字符串‘aaaaa’情况) 依次类推

时间复杂度: O(n)

代码

class Solution(object):def findAnagrams(self, s, p):""":type s: str:type p: str:rtype: List[int]"""'''超限(忽略)'''# t=[]# i = 0# step = len(p)# if len(s)<step:#     return []# if  s==p:#     return [0]# p1 = sorted(p)# while i<=len(s)-step:#     if sorted(s[i:i+step])== p1:#         t.append(i)#     i+=1# return t'''方法二:滑动窗口'''pdict = {}count ={}ans=[]step = len(p)if len(s)<step:return []for i in p:if i not in pdict:pdict[i] = 1count[i] = 0else:pdict[i]+=1for i in range(step):if s[i] in pdict:count[s[i]]+=1l = 0r =step-1while r<len(s):if count==pdict:ans.append(l)if s[l] in pdict:count[s[l]] -=1l+=1r+=1if r<len(s):if s[r] in pdict:count[s[r]]+=1return ans

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词