85 lines
1.6 KiB
Markdown
85 lines
1.6 KiB
Markdown
---
|
|
layout: page
|
|
title: Find All Anagrams in a String
|
|
last_solved:
|
|
category: sliding window
|
|
leetcode_url: https://leetcode.com/problems/find-all-anagrams-in-a-string
|
|
status: Attempted
|
|
---
|
|
|
|
Problem
|
|
-------
|
|
|
|
```
|
|
Given a string s and a non-empty string p, find all the start indices of p's anagrams in s.
|
|
|
|
Strings consists of lowercase English letters only and the length of both strings s and p will not be larger than 20,100.
|
|
|
|
The order of output does not matter.
|
|
|
|
Example 1:
|
|
|
|
Input:
|
|
s: "cbaebabacd" p: "abc"
|
|
|
|
Output:
|
|
[0, 6]
|
|
|
|
Explanation:
|
|
The substring with start index = 0 is "cba", which is an anagram of "abc".
|
|
The substring with start index = 6 is "bac", which is an anagram of "abc".
|
|
Example 2:
|
|
|
|
Input:
|
|
s: "abab" p: "ab"
|
|
|
|
Output:
|
|
[0, 1, 2]
|
|
|
|
Explanation:
|
|
The substring with start index = 0 is "ab", which is an anagram of "ab".
|
|
The substring with start index = 1 is "ba", which is an anagram of "ab".
|
|
The substring with start index = 2 is "ab", which is an anagram of "ab".
|
|
```
|
|
|
|
Solution
|
|
----------
|
|
|
|
Initially did this, but TLE
|
|
TC is n*nlogn
|
|
|
|
sort is expensive
|
|
|
|
{% highlight python %}
|
|
|
|
def findAnagrams(self, s: str, p: str) -> List[int]:
|
|
|
|
if not s: return []
|
|
|
|
length = len(p)
|
|
|
|
|
|
output = []
|
|
for i in range(len(s)-length+1):
|
|
|
|
# sliding window of s
|
|
window = s[i:i+length]
|
|
|
|
if sorted(window)==sorted(p):
|
|
output.append(i)
|
|
|
|
return output
|
|
|
|
|
|
{% endhighlight %}
|
|
|
|
______________
|
|
|
|
|
|
|
|
{% highlight python %}
|
|
|
|
|
|
{% endhighlight %}
|
|
|
|
![image1]() |