问题描述 链接到标题

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

解题思路 链接到标题

参照30.串联所有单词串,思路完全一致。

代码 链接到标题

class Solution {
  public:
    vector<int> findAnagrams(string s, string p) {
        unordered_map<char, int> mp;

        for (char &c : p)
            mp[c]++;
        vector<int> res;
        unordered_map<char, int> tmp = mp;
        for (int l = 0, r = 0; r < s.size(); r++) {
            if (tmp.find(s[r]) != tmp.end()) {
                tmp[s[r]]--;
                if (tmp[s[r]] == 0) {
                    tmp.erase(s[r]);
                    if (tmp.empty()) {
                        res.push_back(l);
                        tmp[s[l++]]++;
                    }
                }
            } else {
                if (mp.find(s[r]) != mp.end()) {
                    while (s[l] != s[r]) {
                        tmp[s[l]]++;
                        l++;
                    }
                    l++;
                } else { //s[r]不在p中
                    l = r + 1;
                    tmp = mp;
                }
                // l++;
            }
        }
        return res;
    }
};