天池 在线编程 最频繁出现的子串(字符串哈希)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

给定一个字符串,我们想知道满足以下两个条件的子串最多出现了多少次:

子串的长度在之间 [minLength, maxLength]
子串的字符种类不超过 maxUnique
写一个函数 getMaxOccurrences ,其返回满足条件的子串最多出现次数

输入: 
s = "abcde"
minLength = 2
maxLength = 5
maxUnique = 3
输出: 1
说明:符合条件的子串有 `ab, bc, cd, de, abc, bcd, cde` 。
每一个子串只出现了一次,因此答案是 1

https://tianchi.aliyun.com/oj/231203672248052266/245580596369363584

2. 解题

class Solution {
public:/*** @param s: string s* @param minLength: min length for the substring* @param maxLength: max length for the substring* @param maxUnique: max unique letter allowed in the substring* @return: the max occurrences of substring*/int maxcount = 0;vector<long long> pow;int getMaxOccurrences(string &s, int minLength, int maxLength, int maxUnique) {// write your code herepow.resize(27);pow[0] = 1;for(int i = 1; i <= 26; i++) {pow[i] = pow[i-1]*26;//预处理 26 的幂次方}for(int len = minLength; len <= maxLength; len++) {	// 暴力枚举子串长度help(s, len, maxUnique);}return maxcount;}void help(string &s, int len, int maxUnique) {unordered_map<long long, int> count;//字符串哈希值,字符串个数unordered_map<char, int> m;//滑窗内的字符计数int i = 0;long long hash = 0;for( ; i < len-1; i++){m[s[i]]++;hash = hash*26+s[i]-'a';}for(int j = 0 ; i < s.size(); ++i){m[s[i]]++;hash = hash*26+s[i]-'a';if(m.size() <= maxUnique && i-j+1 == len){	// 窗口内子串字符种类满足,长度达到 lenif(++count[hash] > maxcount)maxcount = count[hash];}while(i-j+1 > len || m.size() > maxUnique){	// 长度超了,或者 字符种类超了hash -= pow[i-j]*(s[j]-'a');//最前面的字符哈希值减去if(--m[s[j]] == 0)//计数 -1m.erase(s[j]);j++;}}}
};

12ms C++

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


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473300.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于Certificate、Provisioning Profile、App ID的介绍及其之间的关系

刚接触iOS开发的人难免会对苹果的各种证书、配置文件等不甚了解&#xff0c;可能你按照网上的教程一步一步的成功申请了真机调试&#xff0c;但是还是对其中的缘由一知半解。这篇文章就对Certificate、Provisioning Profile等做个总结。 1.概念介绍 如果你拥有一个开发者账户的…

12306 抢票项目霸榜 GitHub,标星即将破万

十一将至&#xff0c;你买到回家的火车票了吗&#xff1f;如果没有&#xff0c;你可以试着打开 GitHub&#xff0c;在搜索栏键入 12306 的关键词&#xff0c;我相信你会发现一个新大陆。没错&#xff0c;这里有 1572 个抢票项目。它们大多用 Python、JavaScript、Java 写成。其…

LeetCode 1700. 无法吃午餐的学生数量(队列模拟 / 不模拟)

文章目录1. 题目2. 解题1. 题目 学校的自助午餐提供圆形和方形的三明治&#xff0c;分别用数字 0 和 1 表示。 所有学生站在一个队列里&#xff0c;每个学生要么喜欢圆形的要么喜欢方形的。 餐厅里三明治的数量与学生的数量相同。 所有三明治都放在一个 栈 里&#xff0c;每一…

leetcode - Linked List Cycle

题目&#xff1a;Linked List Cycle Given a linked list, determine if it has a cycle in it. Follow up:Can you solve it without using extra space? 个人思路&#xff1a; 1、判断一个链表是否有环&#xff0c;标准做法是采取快慢指针&#xff0c;一个走一步&#xff0c…

高效程序员的 7 项技能

软件工程师把大量时间花在练习 LeetCode 问题获得面试技巧和完善简历上。一旦他们最终在一家初创公司、谷歌、亚马逊或其他公司找到工作&#xff0c;他们可能就会发现&#xff0c;他们获得这份工作所需的技能与他们日常工作所需的技能并不匹配。 受 TechLead 高效程序员的七项技…

想成为企业争抢的目标吗?你需要掌握的五大热门IT技能

在任何一个行业确保有最新的工作技能很重要&#xff0c;而在日新月异的IT界尤为重要&#xff0c;因为过去学到的技术和实践可能再也不是今天完成工作所需的技能和实践了。不管你何时或如何学得IT技能——无论通过正规的大学学位课程、强化培训班&#xff0c;还是完全通过自学并…

LeetCode 1701. 平均等待时间(模拟)

文章目录1. 题目2. 解题1. 题目 有一个餐厅&#xff0c;只有一位厨师。你有一个顾客数组 customers &#xff0c;其中 customers[i] [arrivali, timei] &#xff1a; arrivali 是第 i 位顾客到达的时间&#xff0c;到达时间按 非递减 顺序排列。timei 是给第 i 位顾客做菜需…

JS全选功能代码优化

JS全选功能代码优化 原文:JS全选功能代码优化JS全选功能代码优化 最近在看javascript MVC那本书&#xff0c;也感觉到自己写的代码也并不优雅&#xff0c;所以一直在想 用另一种模式来编写JS代码&#xff0c;所以针对之前的简单的JS全选功能来做个简单的demo&#xff0c;使用目…

Win 7 通过事件管理器查看计算机开机关机时间

控制面板-管理工具-事件查看器 视图中开机来源&#xff1a;Kernel-General 事件ID&#xff1a;13 关机来源&#xff1a;Kernel-General 事件ID&#xff1a;12 转载于:https://www.cnblogs.com/hyiam/p/3810499.html

怎么样才能更高效的学习区块链

一、为什么选择区块链 选择区块链作为实践学习的案例&#xff0c;原因有三&#xff1a; 第一&#xff0c;区块链是我最近两三个月刚学习的领域&#xff0c;对我来说也是一门从零开始学习的领域&#xff0c;这样的学习案例最具有指导作用。因为时间没有隔太久&#xff0c;很多…

LeetCode 1702. 修改后的最大二进制字符串(贪心)

文章目录1. 题目2. 解题1. 题目 给你一个二进制字符串 binary &#xff0c;它仅有 0 或者 1 组成。你可以使用下面的操作任意次对它进行修改&#xff1a; 操作 1 &#xff1a;如果二进制串包含子字符串 "00" &#xff0c;你可以用 "10" 将其替换。 比方说…

如何在python中精确地进行浮点数的四舍五入

在python试题中碰到这么一道题&#xff1a; 输入三个浮点数,求它们的平均值并保留 1 位小数,对小数后第二位数进行四舍五入,最后输出结果 错误示范 因为涉及到四舍五入&#xff0c;随便搜了一下&#xff0c;发现了好多博客都用round()&#xff0c;就直接拿来用了 round(1.55…

c语言中的位移位操作

先要了解一下C语言里全部的位运算都是指二进制数的位运算。即使输入的是十进制的数&#xff0c;在内存中也是存储为二进制形式。 “<<”使用方法&#xff1a; 格式是&#xff1a;a<<m&#xff0c;a和m必须是整型表达式&#xff0c;要求m>0。 功能&#xff1a…

LeetCode 1704. 判断字符串的两半是否相似

文章目录1. 题目2. 解题1. 题目 给你一个偶数长度的字符串 s 。将其拆分成长度相同的两半&#xff0c;前一半为 a &#xff0c;后一半为 b 。 两个字符串 相似 的前提是它们都含有相同数目的元音&#xff08;‘a’&#xff0c;‘e’&#xff0c;‘i’&#xff0c;‘o’&#…

怎样处理糟糕的代码?

在职业生涯中&#xff0c;程序员难免会遇到糟糕的代码&#xff08;bad code)——但是你并不需要成为一个打败这些糟糕代码的“恶人”。 从轻松的角度来讲&#xff0c;糟糕的代码可以创造大量的就业机会。比如&#xff1a; 需要从诸多优秀开发人员中找一个人来修复错误代码。需…

LeetCode 1706. 球会落何处(模拟)

文章目录1. 题目2. 解题1. 题目 用一个大小为 m x n 的二维网格 grid 表示一个箱子。 你有 n 颗球。箱子的顶部和底部都是开着的。 箱子中的每个单元格都有一个对角线挡板&#xff0c;跨过单元格的两个角&#xff0c;可以将球导向左侧或者右侧。 将球导向右侧的挡板跨过左上…

android listview 异步加载图片并防止错位

网上找了一张图&#xff0c; listview 异步加载图片之所以错位的根本原因是重用了 convertView 且有异步操作. 如果不重用 convertView 不会出现错位现象&#xff0c; 重用 convertView 但没有异步操作也不会有问题。 我简单分析一下&#xff1a; 当重用 convertView 时&#x…

Python最实用的25个小技巧

Python 是一种通用的高级编程语言。用它可以做许多事&#xff0c;比如开发桌面 GUI 应用程序、网站和 Web 应用程序等。 并且&#xff0c;通过处理常见的编程任务&#xff0c;Python 能让开发者专注应用程序的核心功能。此外&#xff0c;Python 语言的简单语法规则进一步简化了…

LeetCode 1705. 吃苹果的最大数目(优先队列)

文章目录1. 题目2. 解题1. 题目 有一棵特殊的苹果树&#xff0c;一连 n 天&#xff0c;每天都可以长出若干个苹果。 在第 i 天&#xff0c;树上会长出 apples[i] 个苹果&#xff0c;这些苹果将会在 days[i] 天后&#xff08;也就是说&#xff0c;第 i days[i] 天时&#xff0…

Action重定向总结

[HttpPost]public ActionResult StudentList( string StudName, string studName, DateTime BirthDay, FormCollection form, string controller, string Action, StudentModels student){//其中StudName为aspx页面中标签的name属性(StudName不区分大小写)//其中BirthDay为页面…