原题题目
代码实现(首刷自解超时 20/60纯暴力STL)
class Solution {
public:
void visit(unordered_set<string>& set,vector<bool>& v,string p,string temp)
{
if(temp.size() == v.size()) set.emplace(temp);
for(int i=0;i<v.size();++i)
{
if(v[i]) continue;
v[i] = true;
visit(set,v,p,temp+p[i]);
v[i] = false;
}
}
vector<int> findAnagrams(string s, string p) {
int psize = p.size(),ssize = s.size();
vector<int> ret;
vector<bool> v(psize,false);
unordered_set<string> set;
visit(set,v,p,"");
for(int i=0;i<=ssize-psize;++i)
{
if(set.find( s.substr(i,psize) ) != set.end())
ret.emplace_back(i);
}
return ret;
}
};
代码实现(首刷自解 8ms)
class Solution {
public:
class Solution {
public:
vector<int> findAnagrams(string s, string p) {
int psize = p.size(),ssize = s.size();
vector<int> v(26,0),count(v);
for(const auto&chr: p) ++count[chr-'a'];
vector<int> ret;
for(int i=0;i<ssize;++i)
{
v[s[i]-'a'] += 1;
if(i>=psize) v[s[i-psize]-'a'] -= 1;
if(v == count) ret.emplace_back(i+1-psize);
}
return ret;
}
};