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 };
  • 相关阅读:
    zoj 3135 Party of 8g 最大点权独立集
    hdu 5352 MZL's City 最小费用最大流
    hdu 5351 MZL's Border 打表+高精度
    poj 3155 Hard Life 最大密度子图
    希尔排序的温习
    折半查找法的温习
    几所可能去的院校之对比与抉择
    重温排序算法
    5-17 汉诺塔的非递归实现 (25分)
    c语言从文件中读取数据作为输入
  • 原文地址:https://www.cnblogs.com/SarahLiu/p/5999348.html
Copyright © 2011-2022 走看看