思路,使用两个map,一个map收集单词的频率一个用来存遍历的时候的单词。
class Solution {
public List<Integer> findSubstring(String s, String[] words) {
List<Integer> res = new ArrayList<>();
if(words.length == 0){
return res;
}
Map<String,Integer> count = new HashMap<>();
//使用一个数组记数组内单词出现的频率。
for(String word : words){
count.put(word, count.getOrDefault(word,0)+1);
}
int n = s.length();
int num = words.length;
//单词的长度
int len = words[0].length();
int j= 0 ;
Map<String,Integer> inde = new HashMap<>();
for(int i = 0,length = n - num * len;i<=length;i++){
inde.clear();
j = 0;
while(j<num){
String s1 = s.substring(i+j*len,i+(j+1)*len);
if(count.containsKey(s1)){
inde.put(s1,inde.getOrDefault(s1,0)+1);
if(inde.get(s1)>count.get(s1)){
break;
}
}else{
break;
}
j++;
}
if(j == num){
res.add(i);
}
}
return res;
}
}