笨蛋解法
class Solution {
public:
bool checkInclusion(string s1, string s2) {
unordered_map<char,int> target,window;
int pl=0,pr=0,size=s2.size(),flag=0,len=s1.size();
for(char c:s1) target[c]++;
for(;pr<size;pr++)
{
char c=s2[pr];
if(target.find(c)!=target.end())
{
window[c]++;
if(window[c]==target[c])
flag++;
}
//元素是否全了
while(flag==target.size())
{
//看是否刚好个数相同
if(pr+1==pl+len)
return true;
char c=s2[pl];
if(target.find(c)!=target.end())
{
if(window[c]==target[c])
flag--;
window[c]--;
}
pl++;
}
}
return false;
}
};
看答案用向量去做,实在是太精妙了……
class Solution {
public:
bool checkInclusion(string s1, string s2) {
int n=s1.size(),m=s2.size();
if(m<n)
return false;
vector<int> target(26),window(26);
for(int i=0;i<n;i++)
{
target[s1[i]-'a']++;
window[s2[i]-'a']++;
}
if(target==window)
return true;
for(int i=n;i<m;i++)
{
window[s2[i]-'a']++;
window[s2[i-n]-'a']--;
if(target==window)
return true;
}
return false;
}
};