运用滑动窗口即可:
class Solution {
public:
vector<int> findAnagrams(string s, string p) {
vector<int> table1(26);
vector<int> table2(26);
vector<int> res;
int log=s.size();
int shot=p.size();
for(int i=0;i<shot;i++)
{
table1[s[i]-'a']++;
table2[p[i]-'a']++;
}
if(table1==table2)
res.push_back(0);
for(int i=0;i<log-shot;i++)
{
table1[s[i]-'a']--;
table1[s[i+shot]-'a']++;
if(table1==table2)
res.push_back(i+1);
}
return res;
}
};
本文介绍了一种使用滑动窗口解决字符串匹配问题的方法。通过维护两个大小为26的计数表,分别记录目标字符串和模式串中各字符出现次数,实现高效查找所有符合条件的起始位置。
414

被折叠的 条评论
为什么被折叠?



