- 這一題同樣是定長度的 sliding window,window size 為 s1.size()
class Solution {
public:
bool checkInclusion(string s1, string s2) {
unordered_map<char,int> map, map2;
int k = s1.size();
int n = s2.size();
if (k > n) return false;
int valid = 0;
for (const auto& c : s1) map[c]++;
for (int i = 0; i < k; i++) {
if (!map.count(s2[i])) continue;
if (++map2[s2[i]] == map[s2[i]]) valid++;
}
if (valid == map.size()) return true;
for (int i = k; i < n; i++) {
if (map.count(s2[i]) && ++map2[s2[i]] == map[s2[i]]) valid++;
if (map.count(s2[i-k]) && map2[s2[i-k]]-- == map[s2[i-k]]) valid--;
if (valid == map.size()) return true;
}
return false;
}
};