【LeetCode】每日一题 2024_9_27 每种字符至少取 K 个(双指针)

embedded/2024/9/29 20:31:15/

前言

每天和你一起刷 LeetCode 每日一题~

LeetCode 启动!

题目:leetcode.cn/problems/take-k-of-each-character-from-left-and-right/?envType=daily-question&envId=2024-09-27" rel="nofollow">每种字符至少取 K 个

代码与解题思路

func takeCharacters(s string, k int) int {// 核心思路:// 题目要求字符串 s 中,每种字符都取至少 k 个// 而且可以从头取,也可以从尾巴取,找出取的时间最短的方法// 不妨试着先从尾巴开始取,直到达成题目的要求(达不成就直接返回 -1 即可)// 然后再从头开始取,用滑动窗口的思想,找出:“需要的 最少 分钟数”(最优情况)n := len(s)// 由字符 'a'、'b'、'c' 组成的字符串 s,所以 cnt 只用记录者三种字符即可cnt, l := [3]int{}, nfor cnt[0] < k || cnt[1] < k || cnt[2] < k {if l == 0 { // 达不成要求,直接返回 -1return -1}l--cnt[s[l]-'a']++}ans := n-l // 目前需要的分钟数// 滑动窗口,或者说双指针for r := range s { // 维护 cnt 数组中这三个字符的数量,更新子串的最小值cnt[s[r]-'a']++for l < n && cnt[s[l]-'a'] > k {cnt[s[l]-'a']--l++}ans = min(ans, n-l + r+1) // 头的长度 + 尾的长度}return ans
}

今天这道题目比较难想,是力扣之前的一道周赛题,我曾经做过,所以才有思路,如果第一次做大概也做不太出来

核心思路如注释

这道题的难点就在于,题目要求子串的最小值,但是可以从字符串的头开始,也可以从尾开始,两头加在一起的最小值,怎么样才能判断出来呢?

下次遇到这种类型的题目就知道该怎么操作了,既然头尾都可以,那就先全用尾巴的子串,然后再起一个循环,遍历头部的子串来维护整体长度的最小值


题外话

最近在刷字节青训营给的题目,据说这些题目都是字节曾经出过的笔试面试的真题,到时候我做出一定成果了就来分享一下~

视频实况

【【LeetCode】每日一题 2024_9_27 每种字符至少取 K 个(双指针)】

每天进步一点点

可以和我刷一辈子的每日一题吗?
一题一题,积累起来就是一辈子。


http://www.ppmy.cn/embedded/119564.html

相关文章

Mac强制停止应用

文章目录 有时候使用Mac的时候&#xff0c;某个应用卡住了&#xff0c;但是肯定不能因为一个应用卡住了&#xff0c; 就将电脑重启吧&#xff0c;所以只需要单独停止该应用即可&#xff0c;使用快捷键optioncommandesc就会出现强制停止的界面&#xff0c;选择所要停止的应用&a…

通过http地址下载文件

1.HttpWebResponse方法 public void GetPostContent(string url, string localSavePath) {try{ServicePointManager.SecurityProtocol SecurityProtocolType.Tls12;HttpWebRequest myRequest (HttpWebRequest)WebRequest.Create(url);myRequest.Method "GET";myR…

使用 Nuxt Kit 的构建器 API 来扩展配置

title: 使用 Nuxt Kit 的构建器 API 来扩展配置 date: 2024/9/24 updated: 2024/9/24 author: cmdragon excerpt: 摘要:本文详细介绍了如何使用 Nuxt Kit 的构建器 API 来扩展和定制 Nuxt 3 项目的 webpack 和 Vite 构建配置,包括扩展Webpack和Vite配置、添加自定义插件、…

HTML和CSS做一个无脚本的手风琴页面(保姆级)

一、前言 使用HTML和CSS做一个无脚本的手风琴页面。让知识以自己喜欢的方式进入脑子&#xff0c;适用于很多场景&#xff0c;比如以下&#xff1a; 【注&#xff1a;图片源自百度】 二、HTML框架 使用外部样式表&#xff0c;将CSS文件用link标签引入 整体框架如下图&#x…

[论文翻译]基于多模态特征融合的Android恶意软件检测方法

A Multi-modality Feature Fusion Method for Android MalwareDetection 摘要&#xff1a; 安卓系统的高市场占有率和开源特性导致恶意安卓应用程序的数量大幅增加。它给用户带来了许多威胁&#xff0c;如经济损失、隐私泄露和远程控制。构建精确的模型来检测安卓恶意软件更为…

开源模型应用落地-LangChain实用小技巧-文档分割器-自定义文档分割器(十三)

一、前言 在 LangChain 框架中&#xff0c;文档分割器是一种将大段文本拆分成较小块或片段的算法或方法。其目标是创建可单独处理的可管理的片段&#xff0c;这在处理大型文档或数据集时通常是必要的。 而自定义文档分割器可以根据特定的需求和数据类型进行定制和配置&#xff…

redis Redis-Cluster常用命令与Redis性能监控

起因&#xff1a;随着项目的进一步推广&#xff0c;数据量的增大&#xff0c;直接访问mysql数据库获取数据所使用的时间越来越长&#xff0c;为解决当前主要矛盾&#xff0c;决定引入redis非关系型数据库作为缓存层&#xff0c;使得数据并不能直接命中数据库&#xff0c;减少访…