题目描述:
给定一个字符串 s 和一些长度相同的单词 words。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。
注意子串要与 words 中的单词完全匹配,中间不能有其他字符,但不需要考虑 words 中单词串联的顺序。
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;
List<String> set=new ArrayList<>();
for (int i = 0; i < words.length; i++) {
set.add(words[i]);
}
int len=words[0].length();
int size=words.length;
//遍历字符串
for (int i = 0; i <= s.length()-len*size; i++) {
if(!set.contains(s.substring(i,i+len))) continue;
//创建一个记录当前已有的字符串
List<String> used=new ArrayList<>();
used.addAll(set);
for (int j=i;j<=s.length()-len&&j<=i+size*len;j+=len){
if(!set.contains(s.substring(j,j+len))) break;
if(!used.contains(s.substring(j,j+len))) break;
used.remove(s.substring(j, j + len));
if(used.size()==0) res.add(i);
}
}
return res;
}
}
结果如下: