Back to Dashboard
Find All Anagrams in a String
MediumProblem Statement
Given two strings s and p, return an array of all the start indices of p's in s. You may return the answer in any order.
Examples
Example 1:
- Input:
s = "cbaebabacd", p = "abc" - Output:
[0, 6]
Approach 1 Sliding Window:
class Solution {
public List<Integer> findAnagrams(String s, String p) {
var result = new ArrayList<Integer>();
int windowStart = 0, matched = 0;
var charMap = new HashMap<Character, Integer>();
for (var i = 0; i < p.length(); i ++) {
charMap.put(p.charAt(i), charMap.getOrDefault(p.charAt(i), 0) + 1);
}
for (var windowEnd = 0; windowEnd < s.length(); windowEnd ++) {
var endChar = s.charAt(windowEnd);
if (charMap.containsKey(endChar)) {
charMap.put(endChar, charMap.get(endChar) - 1);
if (charMap.get(endChar) == 0) {
matched ++;
}
}
if (matched == charMap.size()) {
result.add(windowStart);
}
while (windowEnd - windowStart + 1 >= p.length()) {
var startChar = s.charAt(windowStart);
if (charMap.containsKey(startChar)) {
if (charMap.get(startChar) == 0) {
matched --;
}
charMap.put(startChar, charMap.get(startChar) + 1);
}
windowStart ++;
}
}
return result;
}
}