# 0438. Find All Anagrams in a String ###### tags: `Leetcode` `Microsoft` `Medium` `Sliding Window` `HashMap` Link: https://leetcode.com/problems/find-all-anagrams-in-a-string/ ## 思路 容易和[0076. Minimum Window Substring](https://hackmd.io/z50NoPGOTlOtJcP9sBE5nw)弄混 这道题是fix length的sliding window 显然要简单很多 不用考虑 **注意第21行的写法,比较两个map,可以直接用equals** ## Code ```java= class Solution { public List<Integer> findAnagrams(String s, String p) { List<Integer> ans = new ArrayList<>(); Map<Character, Integer> target = new HashMap<>(); for(int i = 0;i < p.length();i++){ target.put(p.charAt(i), target.getOrDefault(p.charAt(i), 0)+1); } Map<Character, Integer> curr = new HashMap<>(); int len = p.length(); for(int i = 0;i < s.length();i++){ curr.put(s.charAt(i), curr.getOrDefault(s.charAt(i),0)+1); if(i >= len){ char ch = s.charAt(i-len); if(curr.get(ch)==1){ curr.remove(ch); } else{ curr.put(ch, curr.get(ch)-1); } } if(target.equals(curr)){ ans.add(i-len+1); } } return ans; } } ``` ```python= class Solution: def findAnagrams(self, s: str, p: str) -> List[int]: ans = [] targetCnt = Counter(p) currCnt = Counter() for i in range(len(s)): if i>=len(p): currCnt[s[i-len(p)]] -= 1 currCnt[s[i]] += 1 if targetCnt==currCnt: ans.append(i-len(p)+1) return ans ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up