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

力扣395做题笔记

题目链接

力扣395

第一次尝试

class Solution {public int longestSubstring(String str, int k) {char[] s = str.toCharArray();int n = s.length;int[] cnts = new int[256];int ans = 0;for (int r = 0, l = 0; r < n; r ++) { cnts[s[r]]++;if (cnts[s[r]] >= k) { ans = Math.max(ans, r - l + 1);// l = r + 1;}}return ans;}
}

结果遇到这个样例:

输入
s ="ababacb" k =3输出
7
预期结果
0

题目强调的是该子串里面的每一种字符都要大于k,我的写法错误地理解为只要有一种大于k的子串就行了。

左神解法

这里利用了一点动态规划的思想,这个字符串都是小写的字符串。
在这里插入图片描述
那么就说明,最多有26种字符来组合一个字符串。那么我们从1分析到26,找出子串含有1~26种,每种符合的长度,然后比长短既可以了。
相当于就26种子问题,组合一起就是总问题了。

class Solution {public int longestSubstring(String str, int k) {char[]s = str.toCharArray();int[] cnts = new int[256];int n = s.length;int ans = 0;//collect 当前窗口收集到的字符种类数//satisfy 当前窗口满足条件的种类的数量for (int require = 1; require <= 26; require ++) { Arrays.fill(cnts, 0);for (int r = 0, l = 0, collect = 0, satisfy = 0; r < n; r ++) { cnts[s[r]]++;if (cnts[s[r]] == 1) { collect++;}if (cnts[s[r]] == k) { satisfy++;}//处理种数超过require的情况while (collect > require) {if (cnts[s[l]] == k) { satisfy --;}if (cnts[s[l]] == 1) { collect --;}cnts[s[l++]]--;}//合规,更新答案if (collect == satisfy) {ans = Math.max(ans, r - l + 1);}}}return ans;}
}

我们要看当前窗口收集了多少种类,要控制它不能超过当前处理的子问题(require)的数量,否则就是不合规的,因为它应该在处理之后的子问题才考虑。

  1. 关于窗口收集了多少种类这个问题,我最开始是想找一个哈希表,之类的结构来判断这个窗口已经存了几种字符了,其实没必要,如果有新的种类进入窗口,说明它的数量初始为0,一加完变成了一,这样就说明它是一个新的类型,就要给collect进行增加。
                cnts[s[r]]++;if (cnts[s[r]] == 1) { collect++;}
  1. 关于窗口合规的种类,还要一个变量satisfy来确定当前窗口符合要求的字符的个数,一旦collect == satisfy就说明,我们当前require种字符出现次数都满足了大于等于k的要求了,那么就可以更新答案了。思想和1一样,一个字符加完了之后刚好等于k,不就说明,我们多了一种符合要求的字符吗?所以令satisfy增加
                if (cnts[s[r]] == k) { satisfy++;}
  1. 如果超过了require的情况
    那么就要考虑缩减窗口,同时要判断有没有导致collct和satisfy的变化。
              //处理种数超过require的情况while (collect > require) {if (cnts[s[l]] == k) { satisfy --;}if (cnts[s[l]] == 1) { collect --;}cnts[s[l++]]--;}
  1. 最后更新返回答案即可
                if (collect == satisfy) {ans = Math.max(ans, r - l + 1);}

相关文章:

力扣395做题笔记

题目链接 力扣395 第一次尝试 class Solution {public int longestSubstring(String str, int k) {char[] s str.toCharArray();int n s.length;int[] cnts new int[256];int ans 0;for (int r 0, l 0; r < n; r ) { cnts[s[r]];if (cnts[s[r]] > k) { ans Mat…...

Python-numpy中常用的统计函数及转换函数

numpy中常用的统计函数 numpy中常用统计函数numpy普通统计函数忽略 NaN 值进行统计百分位数 numpy中形状转换函数重塑数组&#xff08;reshape&#xff09;展平数组&#xff08;flatten/ravel&#xff09;转置&#xff08;transpose/T&#xff09; 数据类型的转换使用astype()转…...

【C语言干货】free细节

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、为啥*phead free掉了之后&#xff0c;为啥下面还 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供 可以用&#xff1f; 前言参考 一、为…...

网络安全-等级保护(等保) 2-0 等级保护制度现行技术标准

################################################################################ 第二章&#xff1a;现行等保标准要求&#xff0c;通过表格方式详细拆分了等保的相关要求。 GB 17859-1999 计算机信息系统 安全保护等级划分准则【现行】 GB/T22240-2020 《信息安全技术 网…...

WebSocket(看这一篇就够了)

文章目录 WebSocket 基本概念什么是WebSocket?为什么需要 WebSocket&#xff1f;与 HTTP 协议的区别WebSocket协议的原理WebSocket工作流程WebSocket 数据帧结构和控制帧结构。JavaScript 中 WebSocket 对象的属性和方法&#xff0c;以及如何创建和连接 WebSocket。webSocket简…...

旧物回收小程序:让闲置焕发光彩,为生活增添价值

你是否常常为家中堆积如山的闲置物品而烦恼&#xff1f;那些曾经心爱的物品&#xff0c;如今却成了占据空间的“鸡肋”&#xff0c;丢弃可惜&#xff0c;留着又无处安放。别担心&#xff0c;一款旧物二手回收小程序将为你解决这一难题&#xff0c;让闲置物品重新焕发光彩&#…...

精益数据分析(73/126):黏性阶段的功能优先级法则——七问决策模型与风险控制

精益数据分析&#xff08;73/126&#xff09;&#xff1a;黏性阶段的功能优先级法则——七问决策模型与风险控制 在创业的黏性阶段&#xff0c;如何从海量的功能创意中筛选出真正能提升用户留存的关键改动&#xff1f;今天&#xff0c;我们结合《精益数据分析》中的“开发功能…...

React声明式编程(手动控制,大型项目,深度定制)与Vue响应式系统(自动优化,中小型项目,快速开发)区别

文章目录 React声明式与Vue响应式区别详解一、响应式机制原理对比1.1 Vue的响应式系统Vue响应式流程图Vue响应式代码示例 1.2 React的声明式更新React声明式流程图React声明式代码示例 二、更新触发逻辑差异2.1 Vue的自动更新Vue依赖收集机制 2.2 React的手动更新React Diff算法…...

数学建模MathAI智能体-2025电工杯A题实战

题目&#xff1a; 光伏电站发电功率日前预测问题 光伏发电是通过半导体材料的光电效应&#xff0c;将太阳能直接转化为电能的技术。光伏电站是由众多光伏发电单元组成的规模化发电设施。 光伏电站的发电功率主要由光伏板表面接收到的太阳辐射总量决定&#xff0c;不同季节太阳…...

跨平台游戏引擎 Axmol-2.6.0 发布

Axmol 2.6.0 版本是一个以错误修复和功能改进为主的次要LTS长期支持版本 &#x1f64f;感谢所有贡献者及财务赞助者&#xff1a;scorewarrior、peterkharitonov、duong、thienphuoc、bingsoo、asnagni、paulocoutinhox、DelinWorks 相对于2.5.0版本的重要变更&#xff1a; 通…...

C# Windows Forms应用程序-002

目录 项目结构 主类和命名空间 构造函数和析构函数 初始化组件 (InitializeComponent) 按钮点击事件处理程序 主程序入口点 项目截图&#xff1a; 完整代码&#xff1a; 项目结构 这个项目是一个简单的C# Windows Forms应用程序&#xff0c;获取指定文件的根信息…...

理解计算机系统_线程(八):并行

前言 以<深入理解计算机系统>(以下称“本书”)内容为基础&#xff0c;对程序的整个过程进行梳理。本书内容对整个计算机系统做了系统性导引,每部分内容都是单独的一门课.学习深度根据自己需要来定 引入 接续理解计算机系统_并发编程(10)_线程(七):基于预线程化的…...

【MySQL】09.索引

索引是用来提高数据库的性能的&#xff0c;但查询速度的提高是以插入、更新、删除的速度为代价的&#xff0c;这些写操作&#xff0c;增加了大量的IO。所以它的价值在于提高一个海量数据的检索速度。 1. 认识磁盘 MySQL 给用户提供存储服务&#xff0c;而存储的都是数据&…...

【备忘】 windows 11安装 AdGuardHome,实现开机自启,使用 DoH

windows 11安装 AdGuardHome&#xff0c;实现开机自启&#xff0c;使用 DoH 下载 AdGuardHome解压 AdGuardHome启动 AdGuard Home设置 AdGuardHome设置开机自启安装 NSSM设置开机自启重启电脑后我们可以访问 **http://127.0.0.1/** 设置使用 AdGuardHome DNS 效果图 下载 AdGua…...

[Windows] 游戏常用运行库- Game Runtime Libraries Package(6.2.25.0409)

游戏常用运行库 合集 整合了许多游戏会用到的运行库&#xff0c;支持 Windows XP – Windows 11 系统&#xff0c;并且支持自动检测系统勾选推荐的运行库&#xff0c;方便快捷。 本版特点&#xff1a; By&#xff1a;mefcl 整合常见最新游戏所需运行库 根据系统自动勾选推荐…...

MYSQL order 、group 与row_number详解

一、order by order by A ASC, B DESC,C ASC … 上述语句会先按照A排序&#xff0c;当A相同的时候再按照B排序&#xff0c;当B相同的再按照C排序&#xff0c;并会不按照ABC组合一起排序 二、group by group by A,B,C… select 中的字段必须是group by中的字段&#xff0c;…...

QT之巧用对象充当信号接收者

备注&#xff1a;以下仅为演示不代表合理性&#xff0c;适合简单任务&#xff0c;逻辑简单、临时使用&#xff0c;可保持代码简洁&#xff0c;对于复杂的任务应创建一个专门的类来管理信号和线程池任务. FileScanner类继承QObject和QRunnable&#xff0c;扫描指定目录下的文件获…...

《红警2000》游戏信息

游戏背景&#xff1a;与《红色警戒》系列的其他版本类似&#xff0c;基于红警 95 的背景设定&#xff0c;讲述了第二次世界大战期间&#xff0c;世界各国为了争夺全球霸权而展开战争。游戏画面与音效&#xff1a;在画面上相比早期的红警版本有一定提升&#xff0c;解析度更高&a…...

Vue3 + ThinkPHP8 + PHP8.x 生态与 Swoole 增强方案对比分析

一、基础方案&#xff1a;Vue3 ThinkPHP8 PHP8.x 传统架构 优点 ​成熟稳定​ 组合经过长期验证&#xff0c;文档和社区资源丰富ThinkPHP8 对PHP8.x有良好支持&#xff0c;性能比PHP7提升20-30% ​开发效率高​ TP8的ORM和路由系统大幅减少样板代码Vue3组合式API Vite开发…...

(九)PMSM驱动控制学习---高阶滑膜观测器

在之前的文章中&#xff0c;我们介绍了永磁同步电机无感控制中的滑模观测器&#xff0c;但是同时我们也认识到了他的缺点&#xff1a;因符号函数带来的高频切换分量&#xff0c;使用低通滤波器引发相位延迟&#xff1b;在本篇文章&#xff0c;我们将会介绍高阶滑模观测器的无感…...

25年上半年五月之软考之设计模式

目录 一、单例模式 二、工厂模式 三、 抽象工厂模式 四、适配器模式 五、策略模式 六、装饰器模式 ​编辑 考点&#xff1a;会挖空super(coffeOpertion); 七、代理模式 为什么必须要使用代理对象&#xff1f; 和装饰器模式的区别 八、备忘录模式 一、单例模式 这个…...

Mongo DB | 多种修改数据库名称的方式

目录 方法一&#xff1a;使用 mongodump 和 mongorestore 命令 方法二&#xff1a;使用 db.copyDatabase() 方法 方法三&#xff1a;使用 MongoDB Compass 在 MongoDB 中&#xff0c;更改数据库名称并不是一个直接的操作&#xff0c;因为 MongoDB 不提供直接重命名数据库的命…...

QListWidget的函数,信号介绍

前言 Qt版本:6.8.0 该类用于列表模型/视图 QListWidgetItem函数介绍 作用 QListWidget是Qt框架中用于管理可交互列表项的核心组件&#xff0c;主要作用包括&#xff1a; 列表项管理 支持动态添加/删除项&#xff1a;addItem(), takeItem()批量操作&#xff1a;addItems()…...

Python类属性与实例属性的覆盖机制:从Vector2d案例看灵活设计

类属性与实例属性的交互机制 Python中类属性与实例属性的关系体现了语言的动态特性。当访问一个实例属性时&#xff0c;Python会首先查找实例自身的__dict__&#xff0c;如果找不到&#xff0c;才会去查找类的__dict__。这种机制使得类属性可以优雅地作为实例属性的默认值。 …...

QML与C++交互2

在QML与C的交互中&#xff0c;主要有两种方式&#xff1a;在C中调用QML的方法和在QML中调用C的方法。以下是具体的实现方法。 在C中调用QML的方法 首先&#xff0c;我们需要在QML文件中定义一个函数&#xff0c;然后在C代码中调用它。 示例 //QML main.qml文件 import QtQu…...

EtherNet/IP机柜内解决方案在医疗控制中心智能化的应用潜能和方向分析

引言 在数智化转型浪潮席卷各行各业的今天,医疗领域同样面临着提升运营效率、改善患者体验和加强系统可靠性的多重挑战。Rockwell Automation于2025年5月20日推出的EtherNet/IP机柜内解决方案,为医疗中心的自动化升级提供了一种创新路径。本报告将深入分析这一解决方案的核心…...

springboot中各模块间实现bean之间互相调用(service以及自定义的bean)

springboot中各模块间实现bean之间互相调用&#xff08;service以及自定义的bean&#xff09; https://blog.csdn.net/qq_29477175/article/details/122827446?ops_request_misc&request_id&biz_id102&utm_termspringboot%E5%A4%9A%E6%A8%A1%E5%9D%97%E4%B9%8B%E…...

RabbitMQ 可靠性保障:消息确认与持久化机制(二)

四、持久化机制&#xff1a;数据安全的护盾 &#xff08;一&#xff09;交换机持久化 交换机持久化是确保消息路由稳定的重要保障 。在 RabbitMQ 中&#xff0c;交换机负责接收生产者发送的消息&#xff0c;并根据路由规则将消息路由到相应的队列 。如果交换机在 RabbitMQ 重…...

QML学习07Property

Property 1、Property1.1 定义控件1.2 给控件取别名&#xff0c;不向外暴露控件名字 2、总结 1、Property property int myTopMargin: 0 property int myBottomMargin: 0 property real myReal: 0.0 //双精度浮点数 property string myString: "test" property…...

Skywalking安装部署使用教程

目录 核心功能 架构设计 安装与配置 使用场景 社区与支持 总结 官网 https:///apache/skywalking 部署Skywalking 添加报警配置 自定义告警规则如果您需要自定义告警规则,则需要编辑 alarm-settings.yml 文件并添加自定义的规则。具体来说,您需要按照 YAML 格式定义…...