Given two strings s and p, return an array of all the start indices ofp's anagrams ins. You may return the answer in any order.
An Anagram is a word or phrase formed by rearranging the letters of a different word or phrase, typically using all the original letters exactly once.
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".
Constraints:
1 <= s.length, p.length <= 3 * 104
s and p consist of lowercase English letters.
ac
classSolution {publicList<Integer> findAnagrams(String s,String p) {List<Integer> res =newArrayList<>();//edge casesif (s.length() <p.length() ||s.length() ==0) return res;// get char countsint[] map =newint[26];int diff =0;for (char c :p.toCharArray()) { map[c-'a']++;if (map[c-'a'] ==1) diff++; }// sliding windowint l =0;for (int r =0; r <s.length(); r++) {char c =s.charAt(r); map[c-'a']--;if (map[c-'a'] ==0) diff--;elseif (map[c-'a'] ==-1) diff++;if (r - l >=p.length()) {char lc =s.charAt(l++); // move left point map[lc-'a']++;if (map[lc-'a'] ==0) diff--;elseif (map[lc-'a'] ==1) diff++; }if (diff ==0) res.add(l); }return res; }}// same as https://leetcode.com/problems/permutation-in-string/description/