Back to Dashboard

Find All Anagrams in a String

Medium

Problem 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;
    }
}

Status

Solved

Complexity

Time
O(n)
Space
O(1)

Tags

StringSliding Window

Date

2026-02-17
View Problem Source