滑动窗口,438找出字符串中所有字母的异位词
1.题目
2.解析
这道题我们用滑动窗口来实现,加上哈希表和vector容器的使用来实现这道题目,每次滑动之后我们都对其和答案进行比较,如果全部相等我们返回left,不相等继续滑动即可。
本质就是我们把p中相同数量的字母框起来,然后依次向s中向右滑动,每滑动一次我们都保证了滑动窗口中字母的数量和p中的相等,每次滑动之后我们都对窗口中的字母和p中存储在哈希表中的进行对比。相等返回left,不相等继续向右滑动,知道right出窗口结束滑动。
3.代码
class Solution {
public:vector<int> findAnagrams(string s, string p) {map<char, int>num1;map<char, int>num2;vector<int>nums;for (int i = 0; i < 26; i++){num1.insert({ 'a' + i,0});num2.insert({ 'a' + i,0});}for (auto e : p){num1[e]++;}for (int i = 0; i < p.size(); i++){num2[s[i]]++;}for (int left = 0, right = p.size() - 1; right < s.size();){int count = 0;for (int j = 0; j < 26; j++){if (num1['a' + j]!= num2['a' + j]) {count++;break;}}if (count == 0)nums.push_back(left);num2[s[left]]--;left++;right++;num2[s[right]]++;}return nums;}
};