【leetcode】Find All Anagrams in a String

2023-06-14,,

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时,每往后遍历一个元素,先前的元素也要减一个。

代码如下:

 class Solution {
public:
vector<int> findAnagrams(string s, string p) {
vector<int>ans;
int freq[]={};
for(char c:p)
freq[c-'a']++;
for(int l=,r=,cnt=;r<s.size();++r)
{
if(r-l==p.length() && ++freq[s[l++]-'a']>)
cnt--;
if(freq[s[r]-'a']--> && ++cnt==p.length())
ans.push_back(l);
}
return ans;
}
};

【leetcode】Find All Anagrams in a String的相关教程结束。

《【leetcode】Find All Anagrams in a String.doc》

下载本文的Word格式文档,以方便收藏与打印。