Skip to content

Commit ad44698

Browse files
Time: 11 ms (98.35%), Space: 45.4 MB (82.44%) - LeetHub
1 parent 33d6ab1 commit ad44698

File tree

1 file changed

+31
-25
lines changed

1 file changed

+31
-25
lines changed
Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,43 @@
11
class Solution {
22
public List<Integer> findSubstring(String s, String[] words) {
3-
int n = words.length;
4-
HashMap<String, Integer> map = new HashMap<>();
5-
List<Integer> result = new ArrayList<>();
3+
int n = s.length();
4+
int num = words.length;
5+
int length = words[0].length();
66

7-
for (int i = 0; i < n; i++) {
8-
map.put(words[i],map.getOrDefault(words[i], 0) + 1);
9-
}
7+
Map<String, Integer> counts = new HashMap<>();
108

11-
int k = words[0].length() * words.length;
12-
int z = words[0].length();
13-
int i = 0, j = 0;
9+
for (String word : words) counts.put(word, counts.getOrDefault(word, 0) + 1);
1410

15-
while (j < s.length()) {
16-
if (j - i + 1 == k) {
17-
18-
String sub = s.substring(i, j + 1);
19-
HashMap<String, Integer> map2 = new HashMap<>();
20-
int p = 0;
11+
List<Integer> indexes = new ArrayList<>();
12+
13+
for (int k = 0; k < length; k++) {
14+
int left = k;
15+
int right = k;
16+
int count = 0;
17+
18+
Map<String, Integer> seen = new HashMap<>();
19+
20+
while (right + length <= n) {
21+
String word = s.substring(right, right + length);
22+
right += length;
2123

22-
while (p < sub.length()) {
23-
String temp = sub.substring(p, p + z);
24-
map2.put(temp,map2.getOrDefault(temp, 0) + 1);
25-
p += z;
26-
}
24+
if (counts.containsKey(word)) {
25+
seen.put(word, seen.getOrDefault(word, 0) + 1);
26+
count++;
2727

28-
if (map.equals(map2)){
29-
result.add(i);
28+
while (seen.get(word) > counts.get(word)) {
29+
String leftWord = s.substring(left, left + length);
30+
seen.put(leftWord, seen.get(leftWord) - 1);
31+
left += length;
32+
count--;
33+
} if (count == num) indexes.add(left);
34+
} else {
35+
seen.clear();
36+
count = 0;
37+
left = right;
3038
}
31-
i++;
3239
}
33-
j++;
3440
}
35-
return result;
41+
return indexes;
3642
}
3743
}

0 commit comments

Comments
 (0)