leetcode 438. Find All Anagrams in a String

Posted ctqchina

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 438. Find All Anagrams in a String相关的知识,希望对你有一定的参考价值。

题意:在s串中找到与p串所用字符种类,数目相同的所有子串的起始位置。初始化两个变量start,end,diff。start,end为s串中目前正在与p串比较的子串的起始位置和终止位置。diff为这一子串与p串的差异数。当diff == 0 && (end-start+1) == p.length。则说明我们找到了一个子串,存储start。当diff == 0时,我们需要将start前移,并相应地增加diff。说了很多,当实际上仔细想想就明白了,不难。

class Solution {
    public List<Integer> findAnagrams(String s, String p) {
        
        int slen = s.length(), plen = p.length();
        LinkedList<Integer> ans = new LinkedList<>();
        if(slen < plen) return ans;
        int[] c = new int [26];
        for(int i=0;i<plen;i++)
            c[p.charAt(i)-‘a‘]++;
        
        int diff = plen;
        int start = 0, end = 0;
        while(start<=end && end < slen){
            
            int t = s.charAt(end);
            if(--c[t-‘a‘] >= 0 ) diff--;
            
            while(diff == 0){
                t = s.charAt(start);
                int temp = end - start+1;
                if(temp == plen) ans.add(start);
                
                if(++c[t-‘a‘] > 0) diff++;
                start++;
            }
            end++;
        }
        
        return ans;
    }
}

  

以上是关于leetcode 438. Find All Anagrams in a String的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode——438. Find All Anagrams in a Stringjava

leetcode-438-Find All Anagrams in a String

LeetCode-438.Find All Anagrams in a String

LeetCode 438. Find All Anagrams in a String

[LeetCode] 438. Find All Anagrams in a String

[leetcode]438. Find All Anagrams in a String找出所有变位词