zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    LAMP网站架构解释
    ftp--pureftpd1.0.46
    给远程主机起别名
    ssh修改端口号并进行远程访问
    ssh使两台机器建立连接
    Linux搭建svn服务
    centos上git搭建
    centos上Jenkins搭建
    kvm安装准备
    服务器Java环境配置
  • 原文地址:https://www.cnblogs.com/wxisme/p/7418104.html
Copyright © 2011-2022 走看看