Among all leetcode questions, I find that there are at least 5 substring search problem which could be solved by the sliding window algorithm.
so I sum up the algorithm template here. wish it will help you!
the template:
publicclassSolution {publicList<Integer> slidingWindowTemplateByHarryChaoyangHe(String s,String t) {//init a collection or int value to save the result according the question.List<Integer> result =newLinkedList<>();if(t.length()>s.length()) return result;//create a hashmap to save the Characters of the target substring.//(K, V) = (Character, Frequence of the Characters)Map<Character,Integer> map =newHashMap<>();for(char c :t.toCharArray()){map.put(c,map.getOrDefault(c,0) +1); }//maintain a counter to check whether match the target string.int counter =map.size();//must be the map size, NOT the string size because the char may be duplicate.//Two Pointers: begin - left pointer of the window; end - right pointer of the windowint begin =0, end =0;//the length of the substring which match the target string.int len =Integer.MAX_VALUE; //loop at the begining of the source stringwhile(end <s.length()){char c =s.charAt(end);//get a characterif( map.containsKey(c) ){map.put(c,map.get(c)-1);// plus or minus oneif(map.get(c) ==0) counter--;//modify the counter according the requirement(different condition). } end++;//increase begin pointer to make it invalid/valid againwhile(counter ==0/* counter condition. different question may have different condition */){ char tempc = s.charAt(begin);//***be careful here: choose the char at begin pointer, NOT the end pointer
if(map.containsKey(tempc)){map.put(tempc,map.get(tempc) +1);//plus or minus one if(map.get(tempc) > 0) counter++;//modify the counter according the requirement(different condition).
}/* save / update(min/max) the result if find a target*/// result collections or result int value begin++; } }return result; }}
Firstly, here is my sliding solution this question. I will sum up the template below this code.