首页 > 其他 > 详细

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

时间:2020-04-25 12:23:08      阅读:39      评论:0      收藏:0      [点我收藏+]
 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 };

 

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

原文:https://www.cnblogs.com/yuhong1103/p/12772057.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!