2516. 每种字符至少取 K 个 滑动窗口 正难则反

news2024/9/21 20:52:24

给你一个由字符 'a''b''c' 组成的字符串 s 和一个非负整数 k 。每分钟,你可以选择取走 s 最左侧 还是 最右侧 的那个字符。

你必须取走每种字符 至少 k 个,返回需要的 最少 分钟数;如果无法取到,则返回 -1 。

示例 1:

输入:s = "aabaaaacaabc", k = 2
输出:8
解释:
从 s 的左侧取三个字符,现在共取到两个字符 'a' 、一个字符 'b' 。
从 s 的右侧取五个字符,现在共取到四个字符 'a' 、两个字符 'b' 和两个字符 'c' 。
共需要 3 + 5 = 8 分钟。
可以证明需要的最少分钟数是 8 。

示例 2:

输入:s = "a", k = 1
输出:-1
解释:无法取到一个字符 'b' 或者 'c',所以返回 -1 。

提示:

  • 1 <= s.length <= 105
  • s 仅由字母 'a''b''c' 组成
  • 0 <= k <= s.length

思路分析:

如果我们正着求,想用滑动窗口的思路的话则需要4个指针。因此,我们可以反正来求,最多可以减少多少字母来满足条件。以上图为例,设置两个窗口指针,l,r。r为右指针,l为左指针,当r指针右滑不满足条件时,则一直滑动左指针直到满足条件为止。下面的代码在第二个for循环是已经把不满足答案的给舍去了,所以下面的while循环一定能够找到满足num[ord(s[r])-97]<0:的情况,因此不用添加额外的判断

代码如下

class Solution(object):
    def takeCharacters(self, s, k):
        num=[0]*3
        for i in s:
            num[ord(i)-97]+=1
        for i in range(len(num)):
            num[i]-=k
            if num[i]<0:
                return -1
        
        l=0
        r=0
        ans=0
        for r in range(len(s)):
            num[ord(s[r])-97]-=1
            while num[ord(s[r])-97]<0:
                num[ord(s[l])-97]+=1
                l+=1
            ans=max(r-l+1,ans)
        return len(s)-ans

 

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

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

相关文章

专注LabVIEW 做好一件事

在一次LabVIEW的系统改造项目中&#xff0c;遇到一个设备&#xff0c;操作手册居然还是基于DOS系统的。不难看出&#xff0c;这套设备虽然年代久远&#xff0c;但背后的技术积淀极为深厚。事实证明&#xff0c;这套系统在业内享有很高的认可度&#xff0c;由国外团队开发&#…

翻译神器大盘点:哪些软件让语言障碍不再是问题

如果你渴望提升外文阅读能力&#xff0c;却面临外语基础薄弱的挑战&#xff0c;不必过于担心。幸运的是&#xff0c;当前科技为我们提供了诸多便捷的解决方案——翻译工具。比如百度在线翻译这些工具功能强大&#xff0c;极大地拓宽了我们在日常生活与学习中的语言应用边界。 …

PHP轻松创建高效收集问卷调查小程序系统源码

轻松创建&#xff0c;高效收集 —— 问卷调查小程序&#xff0c;你的调研神器&#xff01; 一、告别繁琐&#xff0c;一键开启调研之旅 还在为设计问卷、收集数据而头疼不已吗&#xff1f;现在&#xff0c;有了“问卷调查小程序”&#xff0c;一切都变得轻松简单&#xff01;无…

戏曲文化苑管理系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;操作日志管理&#xff0c;基础数据管理&#xff0c;公告管理&#xff0c;戏曲管理&#xff0c;用户管理&#xff0c;轮播图信息 微信端账号功能包括&#xff1a;系统首页&#…

向改变技术世界的“导师们”致敬

在教师节这个特殊的日子里&#xff0c;我们通常向那些在课堂上辛勤工作的教师表达敬意&#xff0c;但在技术领域&#xff0c;也有一些导师通过他们的思想、发明和贡献&#xff0c;深刻改变了我们的世界。今天&#xff0c;让我们向那些改变技术世界的导师们致敬&#xff0c;他们…

VUCA时代与传统企业数字化转型

VUCA时代是一个具有现代概念的词&#xff0c;它代表了当前社会和经济环境的一种普遍特征。VUCA是Volatility&#xff08;易变性&#xff09;、Uncertainty&#xff08;不确定性&#xff09;、Complexity&#xff08;复杂性&#xff09;和Ambiguity&#xff08;模糊性&#xff0…

C#笔记8 线程是什么?多线程怎么实现和操作?

这和前面的学习内容可能有点不太连贯&#xff0c;但是呢我们一般来说的学习就是遇到什么困难就去学习什么&#xff0c;这也是为什么看那些循序渐进的教程虽然学的很饱满&#xff0c;但是我们有时会学了前面忘记了后面&#xff0c;或者对某个板块理解不深&#xff0c;乃至于写代…

递归搜索与回溯专题篇二

目录 N皇后 有效的数独 解数独 单词搜索 黄金矿工 不同路径III N皇后 题目 思路 根据题意可知&#xff0c;要想得到n皇后的摆放方案&#xff0c;结果须满足每一行及每一列都只有一个皇后&#xff0c;且每个主对角线和副对角线上只能有一个皇后&#xff0c;我们的做法是&…

STM32单片机 定时器TIM输出比较 PWM波形

一. OC&#xff08;Output Compare&#xff09;输出比较 了解&#xff1a;IC&#xff08;Input Capture&#xff09;输入捕获、CC&#xff08;Capture/Compare&#xff09;输入捕获和输出比较单元功能&#xff1a;用来输出PWM波形&#xff0c;PWM波形又是用来驱动电机的必要条…

2008-2022年各省环境污染综合指数数据(含原始数据+计算结果)

2008-2022年各省环境污染综合指数数据&#xff08;含原始数据计算结果&#xff09; 1、时间&#xff1a;2008-2022年 2、来源&#xff1a;统计年鉴、各省年鉴、环境年鉴 3、指标&#xff1a;省份、年份、废水排放总量&#xff08;万吨&#xff09;、废气中二氧化硫排放量&am…

系统架构设计师 - 系统可靠性分析与设计

系统可靠性分析与设计 系统可靠性分析与设计&#xff08;论文写作&#xff09;可靠性相关基本概念 ★★系统可靠性分析 ★★★★可靠性指标串联系统与并联系统 软件可靠性设计 ★★★★影响软件可靠性的主要因素可靠性设计策略N 版本程序设计防卫式程序设计 双击容错 大家好呀&…

公共场所团队管理-手机端源码讲解--SAAS本地化及未来之窗行业应用跨平台架构

一、团队自主注册码 二、代码 var 二维码 "未来之窗?url"encodeURIComponent(url);var 图片 "<img src"二维码">";CyberWin_Dialog.layer(图片,{type:"frame",title:title,width:"320px",height:"320px"…

从阅读到编辑,全方位PDF编辑器软件功能探索

你现在收到的文件是不是大部分也都是PDF格式的&#xff1f;这个格式可以完整的保存任意Office软件制作文档的格式&#xff0c;但是编辑起来就不是那么方便了。这次我汇集了一些我和身边小伙伴常用的类似福昕高级pdf编辑器这样的编辑工具统统分享给你吧。 1.福昕PDF编辑器 链接…

蚁剑webshell连接报错A JavaScript error occurred in the main process

报错如图&#xff1a; 已知解决方式&#xff1a; 将上传shell中文文件名修改为任意的英文文件名即可连接。

数据库体系结构概述

文章目录 1、集中式数据库2、分布式数据库2.1、体系结构2.2、特性2.3、分片方式2.4、透明性2.5、两阶段提交协议 2PC 1、集中式数据库 三级模式 外模式: 也称用户模式&#xff0c;对应 用户视图模式&#xff08;概念模式&#xff09;: 对应数据库表&#xff08;关系表&#xff…

读软件设计的要素06概念完整性

1. 概念完整性 1.1. 当概念组合成一个软件时&#xff0c;它们可以同步以便协调行为 1.1.1. 同步可能会消除一个概念的某些行为&#xff0c;但决不会添加与该概念的规范不一致的新行为 1.1.2. 在使用概念设计软件时&#xff0c;即使你没有精确定义同步&#xff0c;至少要说服自…

二进制方式安装Helm

二进制方式安装Helm 官网&#xff1a;https://helm.sh/ 1、下载安装包 wget -L https://get.helm.sh/helm-v3.16.0-rc.1-linux-amd64.tar.gz2、解压 tar -xf helm-v3.16.0-rc.1-linux-amd64.tar.gz3、移动到/usr/local/bin/目录下 mv linux-amd64/helm /usr/local/bin/he…

ResNet结构图(ResNet18、ResNet50)

原理&#xff1a;利用conv将通道数逐渐增加&#xff0c; 图片尺寸逐渐缩小 ResNet18结构图 ResNet18中的"18"指的是网络中的加权层数量。具体来说&#xff0c;它包含了18个卷积层和全连接层。 ResNet18的架构包括&#xff1a; 1个7x7卷积层16个3x3卷积层&#xf…

echarts饼图

const payload {id: left-center-1,title: 年龄占比,toolTip: true,data: {total: 197,data: [1, 32, 57, 67, 40],x: [35岁以下, 35-40岁, 40-45岁, 45-50岁, 50岁以上],}, };data [];// const color [#2F7DF2, #F9CA3C, #2E5CF2, #34E9A3, #F63048, #F97A3C, #2FD9F2, #A9…

IOS 开发者账号注册流程

注册步骤 准备资料 营业执照 法人信息&#xff08;电话、身份证信息&#xff09; 注册邮箱&#xff08;公司邮箱&#xff09; 开发者信息&#xff08;电话、身份证信息、邮箱&#xff09;1. 注册AppleID 注册地址&#xff1a; https://appleid.apple.com/account 填写表单信…