知识点

字符串,滑动窗口

思路

需要在s字符串中,滑动得到长度为k的字符串ss,并且判断t的每一位字符在ss中出现的次数。

我们可以使用stl中的map来维护和存储ss和t的每一位字符个数,伴随着窗口滑动,ss的映射随之改变,然后依次判断当前情况下的字符出现个数,并更新答案即可

代码c++

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param s string字符串
     * @param k int整型
     * @param t string字符串
     * @return int整型
     */
    int maxCount(string s, int k, string t) {
        // write code here
        map<int, int>ss;
        map<int, int>tt;
        for (int i = 0; i < k; i++) {//初始化长度为k的字符串的各个字符出现次数
            ss[s[i] - 'a']++;
            cout << ss[s[i] - 'a'] << endl;
        }
        int ans = 0;
        for (int i = 0; i < t.size(); i++) {//初始化字符串t的各个字符出现次数

            tt[t[i] - 'a']++;
            
        }
        for (auto v : tt) {//初始化答案

           if(v.second>=1)ans+=ss[v.first];
        }
        for (int i = k; i < s.size(); i++) {
            ss[s[i - k] - 'a']--;
            ss[s[i] - 'a']++;//窗口滑动,更新变化的两位的字符出现数
            
            int anss = 0;
            for (auto v : tt) {//遍历字符串t,判断每一位的出现次数

               if(v.second>=1)anss+=ss[v.first];
            }
            ans = max(ans, anss);//更新答案
            
        }

        return ans;

    }
};