1月23日腾讯发布消息称,2025年全年,腾讯反舞弊调查部共发现并查处触犯“腾讯高压线”案件七十余起,九十余人因触犯“腾讯高压线”被解聘,其中二十余人因涉嫌犯罪被移送公安机关处理,三十余名涉案的外部人员也被公安机关一并抓捕。
并且在文中还说了,近年来为主动精准地识别舞弊线索,腾讯系统化梳理了过往案例中的关键风险点,并通过自建的多个AI分析工具构建了动态风险模型,通过该模型,主动发现并调查处理了多起违规案件。通过持续的案件反馈,不断提升模型的准确度和深化探索AI与大数据分析技术在舞弊线索主动挖掘中的应用。
不得不佩服,现在的AI真的是太强大的了,不光能用来查资料学习,还能用来反腐,查内鬼。
![]()
![]()
--------------下面是今天的算法题--------------
来看下今天的算法题,这题是LeetCode的第1297题:子串的最大出现次数,难度是中等。
很给你一个字符串 s ,请你返回满足以下条件且出现次数最大的任意子串的出现次数:
1:子串中不同字母的数目必须小于等于 maxLetters 。
2:子串的长度必须大于等于 minSize 且小于等于 maxSize 。
示例1:
输入:s = "aababcaab", maxLetters = 2, minSize = 3, maxSize = 4 输出:2 解释:子串 "aab" 在原字符串中出现了 2 次。 它满足所有的要求:2 个不同的字母,长度为 3 (在 minSize 和 maxSize 范围内)。
示例2:
输入:s = "aaaa", maxLetters = 1, minSize = 3, maxSize = 3 输出:2 解释:子串 "aaa" 在原字符串中出现了 2 次,且它们有重叠部分。
1 <= s.length <= 10^5
1 <= maxLetters <= 26
1 <= minSize <= maxSize <= min(26, s.length)
s 只包含小写英文字母。
问题分析
这题描述的比较绕,实际上是找出满足下面两个条件的所有子串,并且返回这些所有子串中出现频率最高的子串的个数。
因为长的子串必定包含短的子串,越短的子串出现的次数越多,所以我们只需要处理最短字符串minSize的情况,无需理会 maxSize ,所以这题我们可以把它看作是一个窗口长度为minSize的滑动窗口问题。
每次统计窗口内不同字符的个数,其中窗口的长度是固定的,长度为minSize。当窗口中不同字符的个数小于等于maxLetters的时候,说明窗口构成的子串是满足条件的,我们进行截取,然后统计它出现的次数,顺便保存出现频率最高的即可。
关于滑动窗口,我们在中介绍的有三种,一种是大小可变窗口,一种是固定窗口,还一种是只增不减窗口,这题使用的就是固定窗口。(代码如果有看不懂的,可以在下面留言)
JAVA:
public int maxFreq(String s, int maxLetters, int minSize, int maxSize) {
int ans = 0, n = s.length();
int difCnt = 0;// 窗口中不同字母的个数
int left = 0, right = 0;// 窗口的左右边界
int[] alphaCnt = newint[128];// 统计每个字母出现的次数
Map
mp =
new HashMap<>();// 记录子串出现的次数
while (right < n) {
if (alphaCnt[s.charAt(right++)]++ == 0)// 滑动右窗口
difCnt++;
if (right - left == minSize) {// 窗口的长度等于minSize
if (difCnt <= maxLetters) {// 要保证窗口中不同字母的个数小于等于maxLetters
String str = s.substring(left, right);// 截取子串
int freq = mp.getOrDefault(str, 0);
mp.put(str, freq + 1);
ans = Math.max(ans, freq + 1);
}
if (alphaCnt[s.charAt(left++)]-- == 1)// 移动窗口左边界
difCnt--;
}
}
return ans;
}
C++:
public:
int maxFreq(string s, int maxLetters, int minSize, int maxSize) {
int ans = 0, n = s.length();
int difCnt = 0;// 窗口中不同字母的个数
int left = 0, right = 0;// 窗口的左右边界
vector alphaCnt(128, 0);// 统计每个字母出现的次数
unordered_map mp;// 记录子串出现的次数
while (right < n) {
if (alphaCnt[s[right++]]++ == 0)// 滑动右窗口
difCnt++;
if (right - left == minSize) {// 窗口的长度等于minSize
if (difCnt <= maxLetters) {// 要保证窗口中不同字母的个数小于等于maxLetters
string str = s.substr(left, minSize);// 截取子串
mp[str]++;
ans = max(ans, mp[str]);
}
if (alphaCnt[s[left++]]-- == 1)// 移动窗口左边界
difCnt--;
}
}
return ans;
}
笔者简介
博哥,真名:王一博,毕业十多年, 作者,专注于 数据结构和算法 的讲解,在全球30多个算法网站中累计做题2000多道,在公众号中写算法题解900多题,对算法题有自己独特的解题思路和解题技巧。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.