1 class Solution 2 { 3 public: 4 vector<int> findAnagrams(string s, string t) 5 { 6 unordered_map<char, int> need, window; 7 for (char c : t) need[c]++; 8 9 int left = 0, right = 0; 10 int valid = 0; 11 vector<int> res; // 记录结果 12 while (right < s.size()) 13 { 14 char c = s[right]; 15 right++; 16 // 进行窗口内数据的一系列更新 17 if (need.count(c)) 18 { 19 window[c]++; 20 if (window[c] == need[c]) 21 valid++; 22 } 23 // 判断左侧窗口是否要收缩 24 while (right - left >= t.size()) 25 { 26 // 当窗口符合条件时,把起始索引加入 res 27 if (valid == need.size()) 28 res.push_back(left); 29 char d = s[left]; 30 left++; 31 // 进行窗口内数据的一系列更新 32 if (need.count(d)) 33 { 34 if (window[d] == need[d]) 35 valid--; 36 window[d]--; 37 } 38 } 39 } 40 return res; 41 } 42 };
原文:https://www.cnblogs.com/yuhong1103/p/12772057.html