s = "barfoothefoobarman", words = ["foo","bar"] Output: [0,9] s = "wordgoodgoodgoodbestword", words = ["word","good","best","word"] Output: []
public static List<Integer> concatWords(String s,String[] args){
if(args==null || args.length==0) return new ArrayList<Integer>();;
int item_len = args[0].length();
Set<String> set = new HashSet<>();
List<String> list = new ArrayList<>();
for(String str : args) list.add(str);
set.addAll(list);//如果args字符串数组中有重复的字符串则应该用Hashmap来记录各个字符串出现次数而非集合来记录
List<Integer> res = new ArrayList<>();
for(int i = 0; i <= s.length()-item_len*args.length; ) {
String cur = s.substring(i, i+item_len);
int index = i;
while(set.contains(cur)) {
set.remove(cur);
index += item_len;
if(index+item_len<=s.length()) //注意等号
cur = s.substring(index,index+item_len);
}
if(set.isEmpty()) {
res.add(i);
i += item_len*args.length;
}else if(set.size() < list.size()){
i += (list.size()-set.size())*item_len;
}else i++;
set.addAll(list);
}
return res;
}