字符串-至多包含K种字符的子串中最长子串(mid)

一、题目描述

二、解题思路

借鉴以下题目思想,使用双指针,外层循环右侧指针移动,内存循环左侧指针移动

字符串-最长不含重复字符的子字符串(mid)-CSDN博客文章浏览阅读622次,点赞17次,收藏4次。java刷题:求最长不含重复字符的子字符串,使用双指针结合题目要求,减少左指针的移动次数,降低程序执行复杂度,这个题目很好,值得好好理解。https://blog.csdn.net/hehe_soft_engineer/article/details/139320167题目要求K种字符,则设置一个规模大小为K的hashset,该hashset记录当前至多包含K种字符的子串所含的字符类型。

1.当hashset所含字符种类小于K时,右指针++。

2.当hashset所含字符种类等于K时:

        2.1当右指针指向的字符在hashset中,右指针++

        2.2当右指针指向字符不在hashset中,找到当前子字符串中最久未出现的字符,定位到字符位置,将左指针指向该字符后一个位置,右指针++,以实现更新至多包含K种字符的子串。

 3.如果当前子串长度变长了,则更新记录最长长度的变量。

三、代码实现

import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param s string字符串 * @param k int整型 * @return int整型*/public int longestSubstring (String s, int k) {// 设置left和right双指针int left=0,right=0;HashSet<Character> charset=new HashSet<>();charset.add(s.charAt(0));int maxLen=0;for(;right<s.length();right++){if(charset.contains(s.charAt(right))){//此时不做操作}else{if(charset.size()<k){//当前字符种类并没有达到k,添加字符种类charset.add(s.charAt(right));}else{//此时需要从右侧开始找到第k次读取的字符(替换出set)int icounter=0;int leftdeletIndex=right-1;HashSet<Character> tmpcharset=new HashSet<>();while(leftdeletIndex>=left){if(!tmpcharset.contains(s.charAt(leftdeletIndex))){tmpcharset.add(s.charAt(leftdeletIndex));}if(tmpcharset.size()==k){//此时leftdeletIndex就是需要移除的字符tmpcharset.clear();break;}leftdeletIndex--;}left=leftdeletIndex+1;charset.remove(s.charAt(leftdeletIndex));charset.add(s.charAt(right));}}maxLen=maxLen>(right-left+1)?maxLen:(right-left+1);}return maxLen;}
}

四、刷题链接

至多包含K种字符的子串_牛客题霸_牛客网

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

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

相关文章

探索第三方美颜SDK:美颜插件的技术原理

本篇文章&#xff0c;我们将深入了解第三方美颜SDK&#xff0c;主要探讨关于美颜插件的工作机制与算法。 一、第三方美颜SDK的概述 第三方美颜SDK是由专业团队开发的一套用于实现美颜功能的软件开发工具包。它通常包括了各种美颜算法、滤镜效果、人脸识别等核心技术&#xff…

Kafka broker的新增和剔除(服役与退役)

说明&#xff1a;集群现有broker:node1,node2,node3三个,broker.id分别为0&#xff0c;1&#xff0c;2 已有两个topic&#xff1a;products、cities 1、退役&#xff08;Kafka集群中减少一个服务器broker2&#xff09; 退役后要保证剩下的服务器数量大于等于备份数&#xff0c…

【IC前端Job】

IC前端Job 1 前端1.1 前端设计1.2 前端验证(DV)1.3 FPGA原型验证1.4 Emulator1.5 软件验证 上一篇文章细说了设计文档对于IC前端设计人员的重要性&#xff1b;这次集中在前端设计从RTL编码–>RTL freeze这个过程中所要工作和打交道的地方&#xff1b; IC前端设计具体工作&am…

Pytorch常用函数用法归纳

一、创建tensor张量 1.torch.arange() (1)函数原型 torch.arange(start0,end,step1,*,outNone,dtypeNone,layouttorch.strided,deviceNone,requires_gradFalse) (2)参数说明: 参数名称参数类型参数说明startNumber起始值&#xff0c;默认值为0endNumber结束值stepNumber步…

软件设计不是CRUD(21):在流式数据处理系统中进行业务抽象落地——需求分析

本文主要介绍如何在数据处理系统中应用业务抽象的设计思想。目前业界流行的数据处理方式是流式处理&#xff0c;主流的流式处理引擎有Apache Spark&#xff0c;Apache Flink等等。本文选择Apache Flink作为实战案例的落地。由于本文主要是讲解设计思想和流式处理引擎相结合的方…

使用docker直接运行不同版本nodejs命令

在低版本的操作系统上&#xff0c;安装和使用高版本的node以及相关工具可能会因为兼容性问题而无法使用&#xff0c;比如对Ubuntu 18.04来说&#xff0c;会因为glibc的版本问题而无法直接安装使用nodejs 18以上的版本。运行弄得是可能会遇到类似的报错 node: /lib/x86_64-linu…

Linux基础指令目录管理003

今天我们讲一下目录的切换。 操作系统&#xff1a; CentOS Stream 9 操作命令&#xff1a; cd 改变当前工作目录 [rootlocalhost ~]# cd /usr/local/nginx/conf [rootlocalhost conf]# cd .. [rootlocalhost nginx]# cd .. [rootlocalhost local]# 操作命令&#xff1a; …

排八字软件有哪些?

排八字软件有哪些&#xff1f;在市面上有很多排八字的软件可供选择&#xff0c;其中一些比较知名的有&#xff1a; 无敌八字排盘软件&#xff1a;这是一款功能强大的八字排盘软件&#xff0c;提供详细的八字解析和命理分析服务&#xff0c;且完全免费。 网易星盘&#xff1a;网…

【一百】【算法分析与设计】N皇后问题常规解法+位运算解法

N皇后问题 链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 给出一个nnn\times nnn的国际象棋棋盘&#xff0c;你需要在棋盘中摆放nnn个皇后&#xff0c;使得任意两个皇后之间不能互相攻击。具体来说&#xff0c;不能存在两个皇后位于同…

自用了很久的一款强制卸载软件,超级好用!!!

Ashampoo UnInstaller是一款由Ashampoo公司开发的专业卸载工具&#xff0c;它提供了比Windows自带卸载功能更为彻底的程序卸载解决方案。是一款功能强大的卸载工具&#xff0c;旨在帮助用户彻底删除不需要的程序和应用&#xff0c;卸载难以卸载的软件工具&#xff0c;此外他还有…

面试杂谈k8s

其实看我之前的博客&#xff0c;k8s刚有点苗头的时候我就研究过&#xff0c;然后工作的时候间接接触 也自己玩过 但是用的不多就忘记了&#xff0c;正苦于不知道写什么&#xff0c;水一篇 用来面试应该是够了 支持云应用开发、运行与运维一体化的云应用平台软件应运而生 k8s核…

三、框架基础介绍:关于框架基础结构的创建与功能解析

在最近的项目开发中&#xff0c;我们进行了精心的组件结构搭建。 首先&#xff0c;在 src 目录下创建了 components 文件夹&#xff0c;随后在其中创建了 index-basis目录。 在下面创建以下文件 ——index.vue 主组件 ——theme.scss 主题 ——Layout 布局 —— —— rou…

供应商平台基本功能

1.合同管理 合同基本功能 1.1 列表页 搜索&#xff1a;合同编号 列表&#xff1a;合同列表页 查看&#xff1a;跳转到详情页 合计&#xff1a;确认当前页合计&#xff0c;还是所有合同合计。 1.1.2 详情页 点击合同列表页查看跳转至合同详情 1.2合同执行情况 合同具体执行情况&…

智慧车站管理:提升地铁站新质生产力的策略

应用图扑自研产品 HT for Web 结合 BIM 技术&#xff0c;搭建轻量化的 WebGIS 智慧车站系统。 该系统通过整合轨道交通信息&#xff0c;实现了车站数据的多维互联与融合。提升了车站信息管理效率和运营效能&#xff0c;并优化了乘客出行体验。对构建智能、高效、环保的轨道交通…

使用C#实现VS窗体应用——画图板

✅作者简介&#xff1a;大家好&#xff0c;我是 Meteors., 向往着更加简洁高效的代码写法与编程方式&#xff0c;持续分享Java技术内容。&#x1f34e;个人主页&#xff1a;Meteors.的博客&#x1f49e;当前专栏&#xff1a;小项目✨特色专栏&#xff1a; 知识分享&#x1f96d…

前端树形结构组件的设计与实现:以企查查、天眼查股权结构为例

摘要 随着信息化时代的不断发展&#xff0c;数据可视化在各行各业的应用越来越广泛。特别是在商业信息查询领域&#xff0c;如企查查、天眼查等平台&#xff0c;通过直观的数据展示方式&#xff0c;帮助用户快速理解复杂的商业关系。本文将以一个前端tree树形结构模版组件为例…

【算法】模拟算法——替换所有的问号(easy)

题解&#xff1a;替换所有的问好(模拟算法) 目录 1.题目2.题解3.参考代码4.总结 1.题目 题目链接&#xff1a;LINK 2.题解 纯模拟。从前往后遍历整个字符串&#xff0c;找到问号之后&#xff0c;就⽤ a ~ z 的每⼀个字符去尝试替换即可。 3.参考代码 class Solution { pu…

EVO轨迹评估工具基本使用教程(学习记录)

参考文章链接&#xff1a; slam轨迹评估性能指标汇总 EVO安装使用教程 各类数据格式 slam精度评定工具 轨迹评估工具使用&#xff1a;evo安装以及学习 EVO学习记录 评估slam输出轨迹精度的工具&#xff0c;自动生成均值、方差、轨迹等信息的图或表。 支持数据集&#x…

使用docker部署项目

一、docker私有镜像仓库 1、docker私有镜像仓库 库&#xff08;Repository&#xff09;是集中存放镜像的地方&#xff0c;又分为公共镜像和私有仓库。 当我们执行docker pull xxx的时候&#xff0c;它实际上是从registry.docker.com这个地址去查找&#xff0c;这就是Docker公…

城市之旅:使用 LLM 和 Elasticsearch 简化地理空间搜索(二)

我们在之前的文章 “城市之旅&#xff1a;使用 LLM 和 Elasticsearch 简化地理空间搜索&#xff08;一&#xff09;”&#xff0c;在今天的练习中&#xff0c;我将使用本地部署来做那里面的 Jupyter notebook。 安装 Elasticsearch 及 Kibana 如果你还没有安装好自己的 Elasti…