leetcode每日一题:最小化字符串长度

news/2025/3/31 11:45:43/文章来源:https://www.cnblogs.com/podongfeng/p/18798095

image

题目

2716. 最小化字符串长度

给你一个下标从 0 开始的字符串 s ,重复执行下述操作 任意 次:

  • 在字符串中选出一个下标 i ,并使 c 为字符串下标 i 处的字符。并在 i 左侧(如果有)和 右侧(如果有)各 删除 一个距离 i 最近 的字符 c

请你通过执行上述操作任意次,使 s 的长度 最小化

返回一个表示 最小化 字符串的长度的整数。

示例 1:

输入:s = "aaabc"
输出:3
解释:在这个示例中,s 等于 "aaabc" 。我们可以选择位于下标 1 处的字符 'a' 开始。接着删除下标 1 左侧最近的那个 'a'(位于下标 0)以及下标 1 右侧最近的那个 'a'(位于下标 2)。执行操作后,字符串变为 "abc" 。继续对字符串执行任何操作都不会改变其长度。因此,最小化字符串的长度是 3 。

示例 2:

输入:s = "cbbd"
输出:3
解释:我们可以选择位于下标 1 处的字符 'b' 开始。下标 1 左侧不存在字符 'b' ,但右侧存在一个字符 'b'(位于下标 2),所以会删除位于下标 2 的字符 'b' 。执行操作后,字符串变为 "cbd" 。继续对字符串执行任何操作都不会改变其长度。因此,最小化字符串的长度是 3 。

示例 3:

输入:s = "dddaaa"
输出:2
解释:我们可以选择位于下标 1 处的字符 'd' 开始。接着删除下标 1 左侧最近的那个 'd'(位于下标 0)以及下标 1 右侧最近的那个 'd'(位于下标 2)。执行操作后,字符串变为 "daaa" 。继续对新字符串执行操作,可以选择位于下标 2 的字符 'a' 。接着删除下标 2 左侧最近的那个 'a'(位于下标 1)以及下标 2 右侧最近的那个 'a'(位于下标 3)。执行操作后,字符串变为 "da" 。继续对字符串执行任何操作都不会改变其长度。因此,最小化字符串的长度是 2 。

提示:

  • 1 <= s.length <= 100
  • s 仅由小写英文字母组成

思路

​ 第一步先读懂题目,说人话就是,每次操作都可以删除重复的字符,只保留下一个,求这个字符串的最短长度。

​ 那既然是去重,第一考虑就是Set,统计出所有出现过的字符数量。

代码

image

public int minimizedStringLength(String s) {Set<Character> set = new HashSet<>();for (char c : s.toCharArray()) {set.add(c);}return set.size();
}

优化

​ 注意到这个字符串的字符,值域很小,仅是小写英文字母的范围。我们可以使用bitmap的思路,如果某个值出现了,就把这一位置为1,否则就是0,那么重复出现的,这一位继续保持1,最后统计有多少个1就行了。由于小写英文字母只有26个,我们使用1个int(32位),也足够使用了。

优化后代码

image

public int minimizedStringLength(String s) {int ans = 0;for (char c : s.toCharArray()) {ans |= 1 << (c - 'a');}return Integer.bitCount(ans);
}

耗时

image

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

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

相关文章

PVE 状态信息查询

PVE 状态信息查询 2025年1月8日 14:38 存储列表查询 #pvesm status 例子:pvesm status | awk NR>1{print$1":\t"$3"\t"$7} ZFS文件系统查询 #zpool status 例子:zpool status | sed -n /NAME/,/^$/p | sed -n s/\t//p 以下操作必须开启虚拟机选项…

模型上下文协议(MCP)简介

模型上下文协议(MCP)简介 人工智能的快速发展,特别是大型语言模型(llm),在生成类人文本、解决复杂问题和提高各行业生产力方面释放了前所未有的潜力。然而,一个持续存在的挑战仍然存在:这些模型通常与为现代工作流程提供动力的实时动态数据隔离。将 AI 连接到外部系统-…

TS学习-1

TS简介TypeScript由微软开发,是基于JavaScript的一个扩展语言。 TypeScript 包含了 JavaScript 的所有内容,即: TypeScript 是 JavaScript 的超集. TypeScript 需要编译为 JavaScript ,然后交给浏览器或其他 JavaScript 运行环 境执⾏。 TS静态检查,不需要运行就可以…

出海企业数字化为什么需要双层架构ERP?工博深度解析SAP ERP公有云方案

企业海外业务扩张时,可能由于文化差异、经验差异、合规要求和不断变化的地理政治环境等因素,使总部系统的在海外的推广充满挑战。双层架构ERP通过分层部署策略,帮助企业在保持总部控制力的同时,赋予子公司敏捷性与创新力。Gartner将其定义为IT双模式,第1层专注于业务流程中…

PVE RAID模拟恢复案例

PVE RAID模拟恢复案例 2024年10月10日 14:28 https://www.bilibili.com/read/cv32149324/ 1、正常环境现象,看raid磁盘信息和状态 root@pve:/var/lib/vz/dump# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 238.5G 0 disk ├─sda1 8:1 0 1007K 0 part ├─sda2 …

23593243

2353243谢芷欣

27.7K star!这个SpringBoot+Vue人力资源管理系统,让企业开发事半功倍!

`微人事(vhr)`是一款基于**SpringBoot+Vue**全栈技术打造的企业级人力资源管理系统,采用前后端分离架构设计,整合了Redis缓存、RabbitMQ消息队列、WebSocket实时通信等12+项企业级技术方案。项目自开源以来已获得**27.7K星标**,被广泛应用于中小企业的人事管理系统搭建。嗨,…

如何告别电脑卡顿烦恼?90%人未必知道的远程操作1分钟学会!

不知道你们有没有经历过这样的困扰,当电脑使用了一段时间后发现就不再像刚购买时那么丝滑流畅了?卡顿、等待程序、界面响应的情况常有发生,一次两次或还可接受,多次出现可就要令人头疼不已了。 无论是处理工作文件过程中的突然卡死,还是畅玩游戏时的画面冻结,都会严重影响…

SAP商业AI实测:AI如何升级企业全球化运营能力?

在全球化的浪潮中,企业如何快速应对多地区、多规则的复杂挑战?答案或许藏在AI技术的深度应用中。据IDC报告,目前全世界仅有不到20%的企业使用生成式AI,但企业每投入1美元却能获得高达3到10倍的回报!AI的潜力究竟如何释放?SAP的“AI+流程+数据”模式,给出了解决方案。 SA…

MCR106-ASEMI电机驱动专用MCR106

MCR106-ASEMI电机驱动专用MCR106编辑:LL MCR106-ASEMI电机驱动专用MCR106 型号:MCR106 品牌:ASEMI 封装:TO-92 阻断电压:600V 通态电流:2.55A 类型:单向可控硅 工作温度:-40℃~150℃ 在工业电机控制、大功率电源设备和新能源系统中,如何以更小损耗、更高可靠性应对频繁…

实战指南:智慧碳中和管理平台搭建全流程解析(一)

在“双碳”目标的推动下,企业正面临日益严格的碳排放监管要求。然而,当前的碳管理模式仍存在诸多痛点:数据采集渠道分散,难以形成统一的碳排放账本;碳核算流程复杂,依赖人工统计,效率低且易出错;减排策略缺乏精准测算,难以优化碳资产配置。此外,碳交易市场的发展对企…