public: // 判断 c 是否在map1中,且 map1中和map2中c的数量是否相同 boolcheck(char c) { if (map1.count(c) && map1[c] == map2[c]) returntrue; returnfalse; }
boolcheckInclusion(string s1, string s2){
for (auto c : s1) map1[c]++;
int cnt = 0; // map1和map2中有多少个柱子相等 for (int left = 0, right = 0; right < s2.size(); right++) { if (check(s2[right])) cnt --; map2[s2[right]]++; if (check(s2[right])) cnt ++;
// 滑动窗口收缩 if (right - left + 1 > s1.size()) { if (check(s2[left])) cnt -- ; map2[s2[left]] --; if (check(s2[left])) cnt ++ ;
int cnt = 0; // 表示 map1 和 map2 中 有多少个柱子相等 for (int left = 0, right = 0; right < s2.size(); right++) { if (map1.count(s2[right])) { map2[s2[right]]++; if (map1[s2[right]] == map2[s2[right]]) cnt++; }
if (right - left + 1 > s1.size()) { // if (map1[left_char]) // map1[key]会创建这个key出来,val默认为0。map[key]只是访问val的一种方式,无法判断是否存在。 if (map1.count(s2[left])) // 使用count()函数判断key是否存在于map1中 { if (map1[s2[left]] == map2[s2[left]]) cnt --; map2[s2[left]]--; } left ++; }