题解 | #固定字符出现最大次数#
固定字符出现最大次数
https://www.nowcoder.com/practice/73cc3e22a6ea4d00846f53384e4a6915
知识点
字符串,滑动窗口
思路
需要在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;
}
};