zoukankan      html  css  js  c++  java
  • 【leetcode】Find All Anagrams in a String

    【leetcode】438. Find All Anagrams in a String

    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".

    Subscribe to see which companies asked this question

    思路:

    运用hash表,用一个hash表h1统计字符串p中的元素,用另一个hash表h2统计字符串s中的元素,设p中的元素个数是m个,则h2只统计连续的m个元素。所以当坐标>=i时,每往后遍历一个元素,先前的元素也要减一个。

    代码如下:

     1 class Solution {
     2 public:
     3     vector<int> findAnagrams(string s, string p) {
     4         vector<int>ans;
     5         int freq[26]={0};
     6         for(char c:p)
     7             freq[c-'a']++;
     8         for(int l=0,r=0,cnt=0;r<s.size();++r)
     9         {
    10             if(r-l==p.length() && ++freq[s[l++]-'a']>0)
    11                 cnt--;
    12             if(freq[s[r]-'a']-->0 && ++cnt==p.length()) 
    13                 ans.push_back(l);
    14         }
    15         return ans;
    16     }
    17 };
  • 相关阅读:
    把旧表中数据加入到新表中
    mysql字段-创建时间与更新时间
    springboot-maven依赖源
    刚刚下载的IDEA打不开
    matplotlib-实战01
    实战1-数据清理
    python函数(三)
    交换机配置DHCP中继
    python函数(二)
    用事实说话
  • 原文地址:https://www.cnblogs.com/SarahLiu/p/5999348.html
Copyright © 2011-2022 走看看