Back to course home
0% completed
Vote For New Content
My solution using hashMap
Sachin Dev S
Nov 3, 2024
import java.util.*; class Solution { public List<Integer> findStringAnagrams(String str, String pattern) { List<Integer> resultIndices = new ArrayList<Integer>(); Map<Character, Integer> patternMap = new HashMap<>(); for(Character c: pattern.toCharArray()) { patternMap.put(c, patternMap.getOrDefault(c, 0)+1); } char[] arr = str.toCharArray(); int n = arr.length, plen = pattern.length(); Map<Character, Integer> map = new HashMap<>(); for(int i = 0; i < plen; i ++) { map.put(arr[i], map.getOrDefault(arr[i], 0)+1); } if(isMatch(map, patternMap)) { resultIndices.add(0); } int st = 0; for(int end = plen; end < n; end++) { map.put(arr[end], map.getOrDefault(arr[end], 0)+1); map.put(arr[st], map.get(arr[st]) - 1); if(map.get(arr[st]) == 0) { map.remove(arr[st]); } st++; if(isMatch(map, patternMap)) { resultIndices.add(st); } } return resultIndices; } public boolean isMatch(Map<Character, Integer> m1, Map<Character, Integer> m2) { if(m1.isEmpty() || m2.isEmpty()) return false; if(m1.size() != m2.size()) return false; for(Character c: m1.keySet()) { if(m1.get(c) != m2.get(c)) return false; } return true; } }
0
0
Comments
Comments
On this page