24 lines
840 B
Markdown
24 lines
840 B
Markdown
Leetcode #438 | #Medium | [[Скользящее окно]] | [[O(26)]]
|
|
## Идея
|
|
Скользящее окно с идеей `O(26`) (`int[26]` для частот символов)
|
|
## [[Big-O]]
|
|
- Время ```O(N)```
|
|
- Память ```O(1)```
|
|
## Код
|
|
```Java
|
|
class Solution {
|
|
public List<Integer> findAnagrams(String s, String p) {
|
|
List<Integer> res = new ArrayList<>();
|
|
if (s.length() < p.length()) return res;
|
|
int[] b1 = new int[26], b2 = new int[26];
|
|
for (char c : p.toCharArray()) b1[c - 'a']++;
|
|
int l = 0;
|
|
for (int r = 0; r < s.length(); r++) {
|
|
b2[s.charAt(r) - 'a']++;
|
|
if (r - l + 1 > p.length()) { b2[s.charAt(l) - 'a']--; l++; }
|
|
if (r - l + 1 == p.length() && Arrays.equals(b1, b2)) res.add(l);
|
|
}
|
|
return res;
|
|
}
|
|
}
|
|
``` |