1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| #include <vector> #include <string>
using std::string; using std::vector;
class Solution { public: vector<int> findAnagrams(string s, string p) { int i, index, valid = 0, need_valid = 0; int left = 0, right; int slen = s.size(), plen = p.size(); vector<int> need(26, 0); vector<int> curr(26, 0); vector<int> ret;
for (i = 0; i < plen; i++) need[p[i] - 'a']++; for (i = 0; i < 26; i++) if (need[i] > 0) need_valid++;
for (right = 0; right < slen; right++) { if (right - left + 1 > plen) { index = s[left] - 'a';
if (curr[index] == need[index]) valid--;
curr[index]--;
left++; }
index = s[right] - 'a'; curr[index]++;
if (curr[index] == need[index]) valid++;
if (valid == need_valid) ret.push_back(left); } return ret; } };
|