题目描述(难度中等)

给你一个字符串 s ,请你返回满足以下条件且出现次数最大的任意子串的出现次数:

  • 子串中不同字母的数目必须小于等于 maxLetters 。
  • 子串的长度必须大于等于 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 次,且它们有重叠部分。

示例 3:

输入:s = "aabcabcab", maxLetters = 2, minSize = 2, maxSize = 3
输出:3

示例 4:

输入:s = "abcde", maxLetters = 2, minSize = 3, maxSize = 3
输出:0

提示:

  • 1 <= s.length <= 10^5
  • 1 <= maxLetters <= 26
  • 1 <= minSize <= maxSize <= min(26, s.length)
  • s 只包含小写英文字母。

解题思路

这道题目有一个很巧妙的地方在于,我们只需要考虑minSize即可,举个例子:

假设我们子字符串的长度范围为 [2,4],并且允许的最大不同字符数为 4,那么所有满足需求的长度为 4 的子字符串,它的每一次重复里一定至少包含一次长度为 2 的子字符串。例如对于字符串 "abcdefghabcd",其中 "abcd" 重复了两次,那么至少 "ab" 也重复了两次。

代码如下

class Solution {public:int maxFreq(string s, int maxLetters, int minSize, int maxSize) {int len=s.size();map<string, int> counts;//存储每个满足条件的子串的出现次数int hash[26]={0};//每个字母出现的次数int res=0;//结果int left=0;//左指针int unique=0;//统计出现了多少个不同的字母for(int right=0; right<len; right++){if(hash[s[right]-'a']++==0)unique++;//统计字符串中出现的不同字母个数//当条件不满足时,移动左指针,直到条件满足while(unique>maxLetters || right-left+1>minSize){if(hash[s[left++]-'a']-- == 1)//移动左指针unique--;}//条件满足时,更新答案,只考虑minSizeif(right-left+1==minSize){string cur=s.substr(left,minSize);if(counts.count(cur))//已经出现过了,次数加1counts[cur]++;elsecounts.insert(make_pair(cur,1));//未出现过,插入到map中res=max(res,counts[cur]);}}return res;}
};

提交结果:

c与指针 从一个字符串中提取子串_利用双指针解LeetCode第1297题:子串的最大出现次数相关推荐

  1. c与指针 从一个字符串中提取子串_python实现找出来一个字符串中最长不重复子串...

    刚结束的一个笔试题,很简单,不多说简单贴一下具体的实现: #!usr/bin/env python#encoding:utf-8 '''__Author__:沂水寒城功能:找出来一个字符串中最长不重复 ...

  2. python正则表达式提取数字比较好_python正则表达式从字符串中提取数字的思路详解...

    python从字符串中提取数字 使用正则表达式,用法如下: ## 总结 ## ^ 匹配字符串的开始. ## $ 匹配字符串的结尾. ## \b 匹配一个单词的边界. ## \d 匹配任意数字. ## ...

  3. 趣味编程:从字符串中提取信息

    字符串解析是程序员工作中非常重要的一部分,也是非常考验编程能力的工作.基本上我在面试程序员的时候,一定会出一道编程题目作为考察的一方面,而这道题目有很大的可能性是做字符串的解析.例如,给出一个模式规则 ...

  4. leetcode 高薪_利用两种不同的方法解LeetCode第1312题:让字符串成为回文串的最少插入次数

    题目描述(难度困难) 给你一个字符串 s ,每一次操作你都可以在字符串的任意位置插入任意字符.请你返回让 s 成为回文串的 最少操作次数 . 「回文串」是正读和反读都相同的字符串. 示例 1: 输入: ...

  5. 从字符串中提取(“获取”)一个数字

    本文翻译自:Extract ("get") a number from a string I have a string in javascript like `#box2' an ...

  6. 字符转换 提取一个字符串中的所有数字字符('0'……'9'),将其转换为一个整数输出。 首位不能是0

    7-3 字符转换 (13分) 本题要求提取一个字符串中的所有数字字符('0'--'9'),将其转换为一个整数输出. 输入格式: 输入在一行中给出一个不超过80个字符且以回车结束的字符串. 输出格式: ...

  7. 本题要求提取一个字符串中的所有数字字符(‘0‘……‘9‘),将其转换为一个整数输出。

    本题要求提取一个字符串中的所有数字字符('0'--'9'),将其转换为一个整数输出. 输入格式: 输入在一行中给出一个不超过80个字符且以回车结束的字符串. 输出格式: 在一行中输出转换后的整数.题目 ...

  8. java如何获取手机号码_java中如何提取一个字符串中的电话号码?

    展开全部 java中如何提取一个字符串中的电话号码e68a84e8a2ad3231313335323631343130323136353331333363376466,先写出手机号码和固定号码的正则表 ...

  9. 正则匹配——python用一个正则表达式从字符串中提取数字(包括整数、小数、正负数)

    import re# 从字符串中提取数字 totalCount = '-100,abc2.4-123s,d-1ds-0.234as123.2s1.3bb.24' count = re.findall( ...

最新文章

  1. 编译时遇到如下错误error C2061: syntax error : identifier 'THIS_FILE'
  2. 干货:如何利用机器学习实现有噪声标签样本分类模型?
  3. NYOJ 608 畅通工程 并查集
  4. XCode10 swift4.2 适配遇到的坑
  5. tomcat常见配置及优化、升级
  6. 心率传感器MAX30102使用
  7. 保持简单:纪念丹尼斯•里奇
  8. 什么是云计算,云计算运营方式和部署方式介绍
  9. 灭霸一个响指,开源众包出现在开源中国的社区APP里,一键接单从此无忧。
  10. bada开发tips
  11. 测试人员的职业规划 --整理标注
  12. taskmgr跟着敲
  13. ABB机器人50296,SMB内存数据差异”如何处理?
  14. Java零基础笔记自用版(一)
  15. alienware笔记本过热处理
  16. CAS单点登录(http方式)
  17. Java编程实现快速傅里叶变换FFT
  18. 【源译】Optimizeit Profiler概览
  19. linux 查看was端口,Linux如何查看端口状态
  20. 代码写一半感觉无从下手,写不下去了,怎么办?

热门文章

  1. 大数据是如何改变零售行业的
  2. C++算法学习(力扣:面试题 04.04 检查平衡性)
  3. 随机游走问题的神奇应用(一)
  4. java内存映射缓存,java – 用于数据库实现的内存映射的MappedByteBuffer或直接ByteBuffer?...
  5. 电路原理解析_接近开关检测旋转设备的工作原理
  6. 绿米开关如何重置_智能家居基础配置之人体传感器—绿米Aqara 人体传感器
  7. 职称评审英语计算机不作要求,安徽:基层专业技术人员评职称外语计算机不作要求...
  8. linux 0644权限,Linux 中的权限 -- 0755 和 0644
  9. pySpark | pySpark.Dataframe使用的坑 与 经历
  10. Rhino(js的java实现组件)