2024-10-08:用go语言,给定一个字符串 word 和一个整数 k,判断是否可以通过删除最少数量的字符使得该字符串成为 k 特殊字符串。 其中,k 特殊字符串满足字符串中任意两个字符的出现频率

news/2024/10/8 16:06:49

2024-10-08:用go语言,给定一个字符串 word 和一个整数 k,判断是否可以通过删除最少数量的字符使得该字符串成为 k 特殊字符串。

其中,k 特殊字符串满足字符串中任意两个字符的出现频率之差的绝对值均不超过 k。

你可以编写一个算法来计算最少需要删除多少个字符,使得给定的字符串 word 成为 k 特殊字符串。

输入:word = "aabcaba", k = 0。

输出:3。

解释:可以删除 2 个 "a" 和 1 个 "c" 使 word 成为 0 特殊字符串。word 变为 "baba",此时 freq('a') == freq('b') == 2。

答案2024-10-08:

chatgpt

题目来自leetcode3085。

大体步骤如下:

1.创建一个长度为26的整型切片 cnt,用来统计单词 word 中每个字母出现的次数。

2.将 cnt 中的值进行排序,使得它们按照出现次数递减的顺序排列。

3.初始化变量 maxSave 为 0,用来记录最大的节省字符数。

4.遍历经过排序后的 cnt 切片,对于每个字母出现的次数 base:

  • 初始化变量 sum 为 0,用来记录在保留 base+k 个字符的情况下的总字符数量。

  • 对从当前位置开始的 cnt 切片进行遍历,将出现的字符次数与 base+k 中的较小值累加至 sum

  • 更新 maxSavesum 与当前 maxSave 中的较大值。

5.计算最终需要删除的字符数量,即 len(word) 减去 maxSave 的值。

总的时间复杂度:在代码中,排序操作应该是最耗时的部分,时间复杂度为 O(nlog(n)),n 为单词长度。接下来的遍历操作的时间复杂度为 O(26 * n),因为对于每个字符,我们需要对 cnt 切片进行遍历。最终总的时间复杂度为 O(nlog(n) + 26n),约等于 O(nlog(n))。

总的额外空间复杂度:除了输入参数外,代码中使用了长度为26的整型切片 cnt,因此额外空间复杂度为 O(26)(常量级别)。

go完整代码如下:

package mainimport ("fmt""slices"
)func minimumDeletions(word string, k int) int {cnt := make([]int, 26)for _, b := range word {cnt[b-'a']++}slices.Sort(cnt)maxSave := 0for i, base := range cnt {sum := 0for _, c := range cnt[i:] {sum += min(c, base+k) // 至多保留 base+k 个}maxSave = max(maxSave, sum)}return len(word) - maxSave
}
func main() {word  := "aabcaba"k:=0fmt.Println(minimumDeletions(word, k))
}

在这里插入图片描述

rust完整代码如下:

use std::cmp::{max, min};fn minimum_deletions(word: &str, k: i32) -> i32 {let mut cnt: [i32; 26] = [0; 26];for b in word.chars() {cnt[(b as u8 - b'a') as usize] += 1;}slice_sort(&mut cnt);let mut max_save = 0;for (i, &base) in cnt.iter().enumerate() {let mut sum = 0;for &c in &cnt[i..] {sum += min(c, base + k); // 最多保留 base+k 个}max_save = max(max_save, sum);}(word.len() as i32) - max_save
}fn slice_sort(slice: &mut [i32; 26]) {slice.sort_unstable();
}fn main() {let word = "aabcaba";let k = 0;println!("{}", minimum_deletions(word, k));
}

在这里插入图片描述

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

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

相关文章

IIS 配置跨域_IIS配置Access-Control-Allow-Origin

一、使用IIS 界面操作1、设置Access-Control-Allow-Origin 2、打开IIS,找到“HTTP响应标头”点进去 3、在右侧可以看到添加,然后添加如下标头即可 Access-Control-Allow-Headers:Content-Type, api_key, Authorization Access-Control-Allow-Origin:* 二、修改IIS 配置文件…

extcon驱动及其在USB驱动中的应用

extcon,是External Connector的简称,用于抽象外部连接器,比如说Audio Jack、USB MicroB/TypeC接口等。它的原型是Android的switch-class驱动,经过修改后在kernel 3.4.0版本时被引入内核中。Extcon (external connector): import Androids switch class and modify. Externa…

IIS 配置referer 请求筛选_请求拒绝

一、IIS 配置Referer 拒绝解析: 访问静态内容,拒绝指定的referer,例如:拒绝后,对应的网站引用当前网站的静态资源会被拒绝。更多: iis怎么限制http下载速度_IIS 限制网站带宽使用? IIS 执行此操作时出错。 详细信息:web.config 错误,.net core项目IIS10 隐藏 http serve…

RAG系统评测实践详细版:Coze及相关产品评测对比,以及下一代RAG技术

RAG系统评测实践详细版:Coze及相关产品评测对比,以及下一代RAG技术AI RAG系统评测实践:Coze及相关产品评测对比 RAG(检索增强生成)是一种 AI 框架,它将传统信息检索系统(例如数据库)的优势与生成式大语言模型 (LLM) 的功能结合在一起,通过将这些额外的知识与自己的语言…

深入了解Oracle OCP认证,开启数据库专业之旅

使用Oracle数据库的公司内部,经常有员工们在讨论OCP认证(Oracle Certified Professional,Oracle认证专家),这是甲骨文Oracle公司提供的一种专业认证,认证用于使用者在Oracle技术领域的专业知识和技能。 在这里,有一点需要大家知道,虽然OCP认证一般指的是Oracle数据库管理…

vue2项目 一直报ts-plugin错误

如图,项目代码未动,突然代码报错,运行没问题不受影响 经排查,插件Vue-Official版本问题 ,问题版本v2.1.6 解决版本,安装其他版本 ,v1.8.27 作者:听着music睡出处:http://www.cnblogs.com/xqxacm/Android交流群:38197636本文版权归作者和博客园共有,欢迎转载,但未经…

鼠标的移入、移出事件

原文链接:鼠标的移入、移出事件_鼠标移入事件-CSDN博客