Advertisement
1988coder

438. Find All Anagrams in a String

Jan 6th, 2019
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.65 KB | None | 0 0
  1.  
  2. // LeetCode URL: https://leetcode.com/problems/find-all-anagrams-in-a-string/
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.List;
  6.  
  7. /**
  8.  * Sliding window
  9.  *
  10.  * Time Complexity: O(S + P)
  11.  *
  12.  * Space Complexity: O(P)
  13.  *
  14.  * S = Length of input string s. P = Length of input string p.
  15.  */
  16. class Solution {
  17.     public List<Integer> findAnagrams(String s, String p) {
  18.         List<Integer> result = new ArrayList<>();
  19.         if (s == null || p == null || p.length() == 0 || s.length() < p.length()) {
  20.             return result;
  21.         }
  22.  
  23.         HashMap<Character, Integer> map = new HashMap<>();
  24.         for (char c : p.toCharArray()) {
  25.             map.put(c, map.getOrDefault(c, 0) + 1);
  26.         }
  27.  
  28.         int start = 0;
  29.         int end = 0;
  30.         int toBeMatched = map.size();
  31.  
  32.         while (end < s.length()) {
  33.             char endChar = s.charAt(end);
  34.             if (map.containsKey(endChar)) {
  35.                 map.put(endChar, map.get(endChar) - 1);
  36.                 if (map.get(endChar) == 0) {
  37.                     toBeMatched--;
  38.                 }
  39.             }
  40.             end++;
  41.  
  42.             while (toBeMatched == 0) {
  43.                 if (end - start == p.length()) {
  44.                     result.add(start);
  45.                 }
  46.                 char startChar = s.charAt(start);
  47.                 if (map.containsKey(startChar)) {
  48.                     if (map.get(startChar) == 0) {
  49.                         toBeMatched++;
  50.                     }
  51.                     map.put(startChar, map.get(startChar) + 1);
  52.                 }
  53.                 start++;
  54.             }
  55.         }
  56.  
  57.         return result;
  58.     }
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement