LeetCode HOT100 - 找到字符串中所有字母异位词

异位词就是长度相同的字符串中各个字母的出现次数相同

因为 p 的长度是固定的

而且 s 的长度是 \(3*10^4\) ,因此不妨直接遍历 s 的起点,判断从它开始的子串是否满足我们的要求,O(n) 是可以接受的

每次移动,相应把对应字符删除/增加到计数器中

class Solution {
public:
    vector<int> findAnagrams(string s, string p) {
        vector<int> cnt0(26, 0);
        int n = s.size();
        for (int i = 0; i < p.size(); i++) {
            cnt0[p[i] - 'a']++;
        }
        vector<int> cnt(26, 0);
        vector<int> ans;
        if (s.size() < p.size()) {
            return ans;
        }
        for (int i = 0; i < p.size(); i++) {
            cnt[s[i] - 'a']++;
        }
        int l = 0, r = p.size();
        for (r; r < n;) {
            if (cnt == cnt0) {
                ans.emplace_back(l);
            }
            cnt[s[l++] - 'a']--;
            cnt[s[r++] - 'a']++;
        }
        if (cnt == cnt0) {
            ans.emplace_back(l);
        }
        return ans;
    }
}; 
posted @ 2026-03-26 15:23  rdcamelot  阅读(20)  评论(0)    收藏  举报