题目:给定m个不重复的字符 [a, b, c, d],以及一个长度为n的字符串tbcacbdata, 问能否在这个字符串中找到一个长度为m的连续子串,使得这个子串刚好由上面m个字符组成,顺序无所谓,返回任意满足条件的一个子串的起始位置,未找到返回-1。比如上面这个例子,返回3.
public class FindIndex {
public static int findindex(char[] arr,String s){
if(arr.length>s.length())
return -1;
Set<Character> sets=new HashSet<>();
Set<Character> curWindow=new HashSet<>();
int curStart=0;
for(char c:arr) sets.add(c);
for(int i=0;i<s.length();i++){
char c=s.charAt(i);
if(sets.contains(c)&&!curWindow.contains(c)){
curWindow.add(c);
if(curWindow.size()==arr.length)
return curStart;
}else if(sets.contains(c)&&curWindow.contains(c)){
while(s.charAt(curStart)!=c){
curWindow.remove(s.charAt(curStart));
curStart++;
}
curStart++;
}else{
curStart=i+1;
curWindow.clear();
}
}
return -1;
}
public static void main(String[] args) {
String s="tbcacbdata";
char[] arr=new char[]{'a','b','c','d'};
System.out.println(findindex(arr, s));
}
}