1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > LeetCode 438. 找到字符串中所有字母异位词(双指针+滑动窗口)

LeetCode 438. 找到字符串中所有字母异位词(双指针+滑动窗口)

时间:2019-08-29 12:58:12

相关推荐

LeetCode 438. 找到字符串中所有字母异位词(双指针+滑动窗口)

题目描述

给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。

字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 0。

说明:

字母异位词指字母相同,但排列不同的字符串。

不考虑答案输出的顺序。

示例 1:

输入:

s: “cbaebabacd” p: “abc”

输出:

[0, 6]

解释:

起始索引等于 0 的子串是 “cba”, 它是 “abc” 的字母异位词。

起始索引等于 6 的子串是 “bac”, 它是 “abc” 的字母异位词。

示例 2:

输入:

s: “abab” p: “ab”

输出:

[0, 1, 2]

解释:

起始索引等于 0 的子串是 “ab”, 它是 “ab” 的字母异位词。

起始索引等于 1 的子串是 “ba”, 它是 “ab” 的字母异位词。

起始索引等于 2 的子串是 “ab”, 它是 “ab” 的字母异位词。

思路

详见链接

代码

class Solution:def findAnagrams(self,s:str,p:str):res = []window = {}needs = {}for c in p:needs[c] = needs.get(c,0) + 1length , limit = len(p) , len(s)left = right = 0while right < limit:c = s[right]if c not in needs:window.clear()left = right = right + 1else:window[c] = window.get(c,0) + 1if right - left +1 == length:if window == needs:res.append(left)window[s[left]] -= 1left += 1right += 1return restest = Solution()test.findAnagrams("cbaebabacd","abc")

效果

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。