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".
用HashTable,把p串的字符存储在HashTable中,需要查找p串中是否有某个字符的时候,直接在HashTable中定位到。
class Solution {
public:
vector<int> findAnagrams(string s, string p) {
int len1 = s.size();
int len2 = p.size();
vector<int> res;
if(len1 < len2 || !len2) return res;
int m[26];
int i, j, k;
for(i = 0; i < 26; i ++) m[i] = 0;
for(i = 0; i < len2; i ++){
m[p[i] - 'a'] ++;
}
int tmpm[26];
for(i = 0; i <= len1 - len2; i ++){
if(m[s[i] - 'a']){
for(k = 0; k < 26; k ++) tmpm[k] = m[k];
for(j = i; j < len2 + i; j ++){
if(tmpm[s[j] - 'a']){
tmpm[s[j] - 'a'] --;
}else break;
}
if(j == len2 + i) res.push_back(i);
}
}
return res;
}
};