public List<Integer> findSubstring(String s, String[] words) {
int n = words.length, wordLen = words[0].length();
List<Integer> res = new ArrayList<>();
Map<String, Integer> map = new HashMap<>();
Map<String, Integer> seen = new HashMap<>();
for (String word : words) {
map.put(word, map.getOrDefault(word, 0) + 1);
for (int i = 0; i <= s.length() - wordLen * n; i++) {
String word = s.substring(i + j * wordLen, i + (j + 1) * wordLen);
if (!map.containsKey(word)) {
seen.put(word, seen.getOrDefault(word, 0) + 1);
if (seen.get(word) > map.get(word)) {