• LeetCode


    Given a string s and a non-empty string p, find all the start indices of p's anagrams in s.

    Strings consists of lowercase English letters only and the length of both strings s and p will not be larger than 20,100.

    The order of output does not matter.

    Example 1:

    Input:
    s: "cbaebabacd" p: "abc"
    
    Output:
    [0, 6]
    
    Explanation:
    The substring with start index = 0 is "cba", which is an anagram of "abc".
    The substring with start index = 6 is "bac", which is an anagram of "abc".
    

    Example 2:

    Input:
    s: "abab" p: "ab"
    
    Output:
    [0, 1, 2]
    
    Explanation:
    The substring with start index = 0 is "ab", which is an anagram of "ab".
    The substring with start index = 1 is "ba", which is an anagram of "ab".
    The substring with start index = 2 is "ab", which is an anagram of "ab".

    正常都能想到的O(m*n)的解法肯定不行,这种hash+滑动窗口的解法非常的酷炫。

    class Solution {
        public List<Integer> findAnagrams(String s, String p) {
            List<Integer> ret = new ArrayList<Integer>();
            if (s == null || s.equals(""))
                return ret;
            char[] chp = p.toCharArray();
            int[] hash = new int[256];
            for (char ch : chp)
                hash[ch] ++;
            
            int left=0, right=0, cnt=p.length();
            while (right < s.length()) {
                if (hash[s.charAt(right++)]-- > 0)
                    cnt --;
                if (cnt == 0)
                    ret.add(left);
                if (right-left == p.length() && hash[s.charAt(left++)]++ >= 0)
                    cnt ++;
            }
            return ret;
        }
        
        
    }

    http://blog.csdn.net/chenwuji91/article/details/52981530

  • 相关阅读:
    sql_LIKE
    sql_TOP
    oracle_存储过程
    注释@
    request.getAttribute()和request.getParameter()区别
    遍历map
    ORACLE
    JSP
    生成导入模板_设置列宽及标题_解析xml
    解析Excel_Poi
  • 原文地址:https://www.cnblogs.com/wxisme/p/7418104.html
Copyright © 2020-2023  润新知