直接O(n),我理解判断长度就可以,不需要再比较子串了 import java.util.*; public class Main { public static void main(String[] args) { Character[] arr = new Character[]{'a&(417)
#39;,'b','c&(2248)
#39;,'d'}; LinkedList<Character> word = new LinkedList<>(Arrays.asList(arr)); String s = "tbcacbdata"; LinkedList<Character> window = new LinkedList<>(); int index =1; for(char c: s.toCharArray()){ // 如果是word中出现的字母 if(word.contains(c)){ // 首先移动windows到重复字母之后 if(window.contains(c)){ while (window.pollFirst() != c); } window.add(c); // 判断是否存在答案 if(window.size()==word.size()){ System.out.println(index-word.size()); return; } } // 不是 word中的字母 else { window.clear(); } index++; } } }