当前位置: 首页> 财经> 金融 > 公司名字大全免费测试打分_小红书推广运营方案_网站seo置顶 乐云践新专家_推广方法

公司名字大全免费测试打分_小红书推广运营方案_网站seo置顶 乐云践新专家_推广方法

时间:2025/7/9 6:25:08来源:https://blog.csdn.net/2301_80882026/article/details/146422126 浏览次数:1次
公司名字大全免费测试打分_小红书推广运营方案_网站seo置顶 乐云践新专家_推广方法

在这里插入图片描述

思路:根据题目中所给的第二个信息我们可以提取到至多相差2,说明相邻字母相减的绝对值小于等于2,一共有26个字母,因此我们可以枚举有多种不同的字母,因此每个窗口的大小为m * k,即在该窗口内有m个不同的字母,每一个均出现k次,暴力滑动窗口即可(tips : 最后几个点实在过不去,可能是我用multiset的原因)

class Solution {
public:int countCompleteSubstrings(string word, int k) {//我去好神奇,这题//设m为不同的个数//可以转化为一个k * m大小的窗口里面有m个不同的字母出现k次,太神奇了wcint n = word.size();int sum = 0;for(int m = 1; m <= 26; m ++)//将不同字母分组{int b[26] = {0}, cnt = 0;char c = word[0];//记录窗口的上一个是什么字符multiset<int>se;for(int i = 0, j = 0; i < n && k * m <= n; i ++){if(i - j + 1 < k * m){b[word[i] - 'a'] ++;if(b[word[i] - 'a'] == 1) cnt ++;if(i != 0) se.insert(abs(word[i] - c));c = word[i];}else {b[word[i] - 'a'] ++;if(b[word[i] - 'a'] == 1) cnt ++;//统计多少个不同的if(i != 0 && m * k > 1) se.insert(abs(word[i] - c));if(cnt == m){int f = 0;for(int o = 0; o <= 25; o ++){if(b[o] != k && b[o] >= 1){f = 1;break;}  }int u = 0;if(se.size() >= 1)u = *se.rbegin();if(!f && u <= 2) sum ++;}//相当于有两个条件的判断b[word[j] - 'a'] --;auto it = se.find(abs(word[j + 1] - word[j]));//nmd忘记取绝对值了if(it != se.end()) se.erase(it) ;//只删除一个c = word[i];if(b[word[j] - 'a'] == 0) cnt --;j ++;  }}}return sum;}
};
关键字:公司名字大全免费测试打分_小红书推广运营方案_网站seo置顶 乐云践新专家_推广方法

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: