Python求解在一个字符串中找到重组子串

2022-08-03,,,,

给定一个字符串s和一个非空子串p,找到所有p的重组字符串在s中出现的初始位置。该字符串全部由小写字母组成,s和p的长度都不超过20100.输出的顺序不重要。

例:s:‘cbaebabacd’. p:‘abc’ . 输出:[0:6]

解题思路,一般在字符串中不考虑顺序,都会要用到字典或者是set,counter。找到全部重组子串,维护两个集合,每次进行滑动窗口的判断,记录位置。

def findanagrams(s):
	res=[]
	#将p字符串放入到counter集合中,同时在s字符p长度-1的子字符串
	s_set = Counter(s[:len(p)-1])
	p_set = Counter(p)
	for i in range(len(p)-1,len(s)):
		s_set[s[i]]+=1
		#判断s_set和p_set是否相等
		if s_set == p_set:
			res.append(i-len(p)+1)
		#将第一个字符从集合s_set中删除掉,缩小窗口
		s_set[s[i-len(p)+1]]-=1
		if s_set[s[i-len(p)+1]]==0
			del s_set[s[i-len(p)+1]]
	return res

本文地址:https://blog.csdn.net/jhsignal/article/details/107353394

《Python求解在一个字符串中找到重组子串.doc》

下载本文的Word格式文档,以方便收藏与打印。