当前位置: 首页 > news >正文

LeetCode题解1297. 子串的最大出现次数

(好久没写题解了,忙着学ai去了)

先来看题目

很显然,题目就是要我们在给定的字符串中找到一个满足要求的连续子串。

首先,要求子串中不同字母的数目得小于等于maxLetters,我们可以用一个DifLettsers函数来判断

bool DifLetters(int cnt[], int num){int n = 0;for(int i = 0; i < 26; i++){if(cnt[i] != 0)n++;}return n > num ? false : true;}

其次,我们要找到一个长度在minSize和maxSize之间的子串,且该子串出现次数最多。我们这样想,如果我们找到了一个满足该条件的子串,那么对于该子串,我们可以从中找到一个子串(长度在minSize和maxSize之间),也满足出现次数最多。于是,对于一个长度在minSize和maxSize之间的满足该要求的字符串,我们总是能找到他的一个子串也满足题目要求,从而,满足该条件的最小子串的长度就是minSize。这是剪枝,我们缩小了搜索空间,只需搜索长度为minSize的字符串即可

那么,该题就是一个定长滑动窗口的题目。即,给定一个字符串,要求你在其中找出一个不同字母的数目小于maxLetters,长度为minSize的出现次数最多的子串。

那么,我们可以写出如下代码

class Solution {bool DifLetterst(int cnt[], int num){int n = 0;for(int i = 0; i < 26; i++){if(cnt[i] != 0)n++;}return n > num ? false : true;}
public:int maxFreq(string s, int maxLetters, int minSize, int maxSize) {int cnt[26] = {0};   // 字母计数int maxCnt = 0;      // 最大出现次数std::unordered_map<std::string, int> map;   // 子串集合int left = 0; for (int i = 0; i < s.size(); i++) {// 字符计数cnt[s[i] - 'a']++;if(i < minSize - 1)continue;// 如果不同字母数大于maxLettersif(!DifLetters(cnt, maxLetters)){cnt[s[left] - 'a']--;left++;continue;}// 维护最大出现次数maxCnt = max(maxCnt, ++map[string(s.begin()+ left, s.begin() + i + 1)]);cnt[s[left] - 'a']--;left++;}return maxCnt;}
};

OK,本题结束!

相关文章:

  • 大模型评测调研报告
  • 计算机网络 | 应用层(6) -- 套接字编程
  • 大模型基础(三):Llama3复现
  • Mac桌面幻灯片,Google文档,google硬盘和google等图标如何移除
  • Docker(二):docker常用命令
  • 2025系统架构师---解释器架构风格‌
  • Rust:安全与性能兼得的现代系统编程语言
  • 深入探索Python Pandas:解锁数据分析的无限可能
  • 【Java】分布式事务解决方案
  • 「Mac畅玩AIGC与多模态02」部署篇01 - 在 Mac 上部署 Ollama + Open WebUI
  • (MySQL)表的操作
  • Ant(Ubuntu 18.04.6 LTS)安装笔记
  • 「Mac畅玩AIGC与多模态03」部署篇02 - 在 Mac 上部署 Dify
  • Pydantic:校验器(@validator)、模型嵌套、模型继承
  • 使用cesium设置第一视角
  • openharmony—4.1 softbus_tool 工具编译使用测试笔记(持续更新)
  • ubuntu 安装ollama后,如何让外网访问?
  • 基于QT(C++)实现(GUI)旅行查询与模拟系统
  • 展销编辑器在未来的发展前景​
  • python 取出字串中的所有词
  • 庆祝中华全国总工会成立100周年暨全国劳动模范和先进工作者表彰大会隆重举行,习近平发表重要讲话
  • 李勇已任内蒙古乌兰察布市委副书记,曾在中央编办任职
  • 13家券商一季报出炉:超七成业绩预喜,财通、湘财、第一创业下滑
  • 民航局:中方航空公司一季度运输国际旅客同比大增34%
  • 新华时评·首季中国经济观察丨用好用足更加积极的财政政策
  • 网贷放款后自动扣除高额会员费,多家网贷平台被指变相收取“砍头息”