码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode 438. Find All Anagrams in a String

时间:2018-12-12 23:45:59      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:find   不难   string   ==   初始化   ring   for   题意   integer   

题意:在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

标签:find   不难   string   ==   初始化   ring   for   题意   integer   

原文地址:https://www.cnblogs.com/ctqchina/p/10111479.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!