1. 程式人生 > 其它 >leetcode 字串的排列

leetcode 字串的排列

滑動視窗的經典用法,左右指標維持視窗,當找到合適子串就返回。

 public boolean checkInclusion(String s1, String s2) {
        Map<Character,Integer> need=new HashMap<>();
        Map<Character,Integer> window=new HashMap<>();
        int left=0,right=0;
        int valid=0;
        char [] s1Chararray=s1.toCharArray();
        
for(char c:s1Chararray) need.put(c,need.getOrDefault(c,0)+1); while(right<s2.length()) { char r=s2.charAt(right); right++; if(need.containsKey(r)) { window.put(r,window.getOrDefault(r,0)+1); if(window.get(r).equals(need.get(r))) valid
++; } while(right-left>=s1.length()) { char l=s2.charAt(left); left++; if(valid==need.size()) return true; if(need.containsKey(l)) {
if(window.get(l).equals(need.get(l))) valid--; window.replace(l,window.get(l)-1); } } } return false; }