leetcode刷题系列-Find All Anagrams in a String

来源:互联网 发布:java编写的著名游戏 编辑:程序博客网 时间:2024/06/05 12:49

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

Show Tags
Show Similar Problems

Have you met this question in a real interview? 

Yes
 

class Solution {public:    vector<int> findAnagrams(string s, string p) {          vector<int> ans;          int n=s.size(),m=p.size();          vector<int> h1(26),h2(26);          for(int i=0;i<m;i++)          h1[p[i]-'a']++;          for(int i=0;i<n;i++)          {              h2[s[i]-'a']++;              if(i>=m)                  h2[s[i-m]-'a']--;              if(h1==h2)                  ans.push_back(i-m+1);          }          return ans;      }  };


0 0