思路:滑动窗口,哈希表
- 为词典中的单词建立一个哈希表。
- 词典中单词的长度为
len,单词个数为n,滑动窗口长度为len * n - 分别以字符串前
len个单词为滑动窗口的起始点,每次向后滑动len个字符,为滑动窗口中的字符串建立哈希表,若两个哈希表相等,说明找到了一个目标子串。
代码:
class Solution {
public List<Integer> findSubstring(String s, String[] words) {
List<Integer> res = new ArrayList<>();
if (s == null || s.length() == 0 || words == null || words.length == 0) {
return res;
}
int miniLen = words[0].length();
int len = miniLen * words.length;
Map<String, Integer> map = new HashMap<>();
for (String word : words) {
map.put(word, map.getOrDefault(word, 0) + 1);
}
for (int i = 0; i < miniLen; i++) {
int first = i;
int last = first + len;
while (last <= s.length()) {
String subS = s.substring(first, last);
Map<String, Integer> mapTemp = new HashMap<>();
int j = 0;
while (j < subS.length()) {
mapTemp.put(subS.substring(j, j+miniLen), mapTemp.getOrDefault(subS.substring(j, j+miniLen), 0) + 1);
j += miniLen;
}
if (map.equals(mapTemp)) {
res.add(first);
}
first += miniLen;
last += miniLen;
}
}
return res;
}
}

该博客介绍了如何使用滑动窗口和哈希表的方法来查找给定字符串中是否存在词典中所有单词的串联子串。通过创建哈希表存储词典中的单词及其出现次数,然后以每个单词的长度为步长滑动窗口,对比窗口内字符串的哈希表与词典哈希表,找到匹配的子串。代码示例展示了具体的实现过程。
555

被折叠的 条评论
为什么被折叠?



