leetcode 找到字符串中所有字母的异位词

时间:2021-08-12
本文章向大家介绍leetcode 找到字符串中所有字母的异位词,主要包括leetcode 找到字符串中所有字母的异位词使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

滑动窗口算法的应用,通过两个while循环分别控制右指针和收缩条件

  public List<Integer> findAnagrams(String s, String p) {
            List<Integer> res=new ArrayList<>();
            Map<Character,Integer> need=new HashMap<>();
            Map<Character,Integer> window=new HashMap<>();
            int left=0,right=0,start=0;
            int index=0;
            int valid=0;
            char [] pCharArray=p.toCharArray();
            for(char c:pCharArray)
            {
                need.put(c,need.getOrDefault(c,0)+1);
            }
            while(right<s.length())
            {
                char r=s.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>=p.length())
                 {
                        if(valid==need.size())
                            res.add(left);
                        char l=s.charAt(left);
                        left++;  
                    if(need.containsKey(l))
                    {
                        if(window.get(l).equals(need.get(l)))
                         valid--;
                         window.replace(l,window.get(l)-1);
                    }
                 }
            }
            return res;
    }

原文地址:https://www.cnblogs.com/xxsdbk/p/15131814.html