zoukankan      html  css  js  c++  java
  • 438. Find All Anagrams in a Strin

    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(n)的时间复杂度做出来,而是用了O(mn)的时间复杂度做,看了答案才知道本题是sliding window的变体,是two pointer的例子,不是很难,代码如下:
     1 public class Solution {
     2     public List<Integer> findAnagrams(String s, String p) {
     3         List<Integer> res = new ArrayList<Integer>();
     4         if(s==null||s.length()==0||p==null||p.length()==0) return res;
     5         int left = 0,right = 0;
     6         int count  =p.length();
     7         int[] word = new int[256];
     8         for(int i=0;i<p.length();i++){
     9             word[p.charAt(i)]++;
    10         }
    11         while(right<s.length()){
    12             if(word[s.charAt(right++)]-->=1) count--;
    13             if(count==0) res.add(left);
    14             if(right-left==p.length()&&word[s.charAt(left++)]++>=0) count++;
    15         }
    16         return res;
    17     }
    18 }
  • 相关阅读:
    HLG 1522 子序列的和【队列的应用】
    POJ 3273 Monthly Expense【二分】
    HDU 4004 The Frog's Games 【二分】
    POJ 2001 Shortest Prefixes【第一棵字典树】
    POJ 2823 Sliding Window【单调对列经典题目】
    HDU 1969 Pie 【二分】
    POJ 3125 Printer Queue【暴力模拟】
    POJ 3250 Bad Hair Day【单调栈】
    字典树【模板】
    验证码 Code
  • 原文地址:https://www.cnblogs.com/codeskiller/p/6577384.html
Copyright © 2011-2022 走看看