class Solution { Map<String, Integer> map = new HashMap<>(); public List<Integer> findSubstring(String s, String[] words) { for (int i = 0; i < words.length; i++) { map.put(words[i], map.getOrDefault(words[i], 0) + 1); } int k = words[0].length(); int w = k * words.length; List<Integer> ans = new ArrayList<>(); for (int i = 0; i < s.length() - w + 1; i++ ) { if (check(s, i, i + w - 1, k)) { ans.add(i); } } return ans; } public boolean check(String s, int start, int end, int k) { Map<String, Integer> tMap = new HashMap<>(); for (int i = start; i <= end - k + 1; i += k) { String t = s.substring(i, i + k); if (!map.containsKey(t)) { return false; } tMap.put(t, tMap.getOrDefault(t, 0) + 1); } for (Map.Entry<String, Integer> e : tMap.entrySet()) { if (!e.getValue().equals(map.get(e.getKey()))) { return false; } } return true; } }
|