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

1、题目:找到字符串中所有字母异位词

给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。

异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。

LeetCode_438 找到字符串中所有字母异位词_第1张图片

2、解题思路

1、固定滑窗长度为字符串p的长度pLen,用哈希表记录字符串s的滑窗内各字符与字符串p之间的差值(p的该字符数量减s的该字符数量)
2、用differ变量记录所有字符差值的绝对值之和,当differ为0时说明所有字符数量一致,当前滑窗满足要求
3、滑窗每次右移一位时右端字符差值减1,左端字符差值加1,根据新差值的符号判断differ的变化

3、代码

class Solution 
{
public:
    vector findAnagrams(string s, string p) 
    {
        int sLen=s.size(),pLen=p.size();
        if(sLen ans;
        while(r0 ? 1:-1;
            ++r;
            ++l;
        }
        if(differ==0) 
            ans.emplace_back(l);
        return ans;
    }
};

你可能感兴趣的:(LeetCode,leetcode,算法,职场和发展)