438. 找到字符串中所有字母异位词

 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 };

 

posted @ 2020-04-25 11:15  Jinxiaobo0509  阅读(121)  评论(0)    收藏  举报