算法思想 :
就是构建两个哈希表;
class Solution {
private:
vector<int>result;
public:
vector<int> findAnagrams(string s, string p)
{
if(s.size()==0||p.size()==0)
return result;
vector<int>vs(26,0);//用数组来创建两个哈希表;
vector<int>vp(26,0);
//主要的内容;
for(char c:p)//遍历p字符串;结果存入到vp中;存入的是数字;
vp[c-'a']++;
//主要的算法内容;
for(int i=0;i<s.size();i++)//遍历给定的要查找的字符串;
{
if(i>=p.size())//如果说此时的下标大于滑动窗口的长度;
vs[s[i-p.size()]-'a']--;
vs[s[i]-'a']++;//将当前的字符加入到滑动窗口中;
if(vs==vp)//注意这里只比较数组的内容并不需要比较顺序;
result.push_back(i-p.size()+1);
}
return result;
}
};
第二个字符串的长度就是滑动窗口的长度;
第一个字符串为匹配串;
有一个重要的知识点就是 两个数组相等 只比较数组里面的内容 并不比较数组里的内容的顺序;