2024-12-14:K 周期字符串需要的最少操作次数。用go语言,给定一个长度为n的字符串 word 和一个整数k,k是n的因数。每次操作可以选择两个下标i和j,使得i和j都可以被k整除,然后用从j开始的长度为k的子串替换从i开始的长度为k的子串。要使得word成为一个K周期字符串,需要进行最少的操作次数。

一个K周期字符串是指存在一个长度为k的字符串s,通过多次连接s可以得到word。比如,如果word == "ababab",那么当s = "ab"时,word是一个2周期字符串。

现在,请计算使word成为K周期字符串所需的最少操作次数。

1 <= n == word.length <= 100000。

1 <= k <= word.length。

k 能整除 word.length 。

word 仅由小写英文字母组成。

输入:word = "leetcodeleet", k = 4。

输出:1。

解释:可以选择 i = 4 和 j = 0 获得一个 4 周期字符串。这次操作后,word 变为 "leetleetleet"。

答案2024-12-14:

chatgpt

题目来自leetcode3137。

大体步骤如下:

1.初始化变量 n 为字符串 word 的长度,并设定变量 res 初始值为最大整数。

2.创建一个空的计数映射 count,用于存储不同子串的出现次数。

3.遍历字符串 word 中长度为 k 的子串,依次检查每个子串。

4.在循环中,统计每个长度为 k 的子串出现的次数,更新 res 为使得 word 成为 K 周期字符串所需的最少操作次数。

5.返回最少操作次数 res。

总体时间复杂度:

  • 遍历整个字符串 word 需要 O(n/k) 的时间。

  • 在每一步中,计算和更新 res 的时间复杂度为 O(1)。

  • 因此,总体时间复杂度为 O(n/k)。

总体额外空间复杂度:

  • 需要额外的空间来存储计数映射 count,其大小取决于字符串中包含 unique 子串的数量,最坏情况下可达到 O(n/k)。

  • 因此,总体额外空间复杂度为 O(n/k)。

Go完整代码如下:

package main

import (
"fmt"
"math"
) func minimumOperationsToMakeKPeriodic(word string, k int) int {
n, res := len(word), math.MaxInt
count := map[string]int{}
for i := 0; i < n; i += k {
count[word[i:i+k]]++
res = min(res, n/k-count[word[i:i+k]])
}
return res
} func main() {
word := "leetcodeleet"
k := 4
fmt.Println(minimumOperationsToMakeKPeriodic(word, k))
}

Rust完整代码如下:

use std::collections::HashMap;

fn min_operations_to_make_k_periodic(word: &str, k: usize) -> i32 {
let n = word.len();
let mut res = i32::MAX;
let mut count: HashMap<&str, i32> = HashMap::new(); for i in (0..n).step_by(k) {
let sub_str = &word[i..i+k];
*count.entry(sub_str).or_insert(0) += 1;
res = res.min((n / k) as i32 - *count.get(&sub_str).unwrap_or(&0));
} res
} fn main() {
let word = "leetcodeleet";
let k = 4;
println!("{}", min_operations_to_make_k_periodic(word, k));
}

2024-12-14:K 周期字符串需要的最少操作次数。用go语言,给定一个长度为n的字符串 word 和一个整数k,k是n的因数。每次操作可以选择两个下标i和j,使得i和j都可以被k整除,然后用从j的更多相关文章

  1. 4.写一个控制台应用程序,接收一个长度大于3的字符串,完成下列功能: 1)输出字符串的长度。 2)输出字符串中第一个出现字母a的位置。 3)在字符串的第3个字符后面插入子串“hello”,输出新字符串。 4)将字符串“hello”替换为“me”,输出新字符串。 5)以字符“m”为分隔符,将字符串分离,并输出分离后的字符串。 */

    namespace test4 {/* 4.写一个控制台应用程序,接收一个长度大于3的字符串,完成下列功能: 1)输出字符串的长度. 2)输出字符串中第一个出现字母a的位置. 3)在字符串的第3个字符 ...

  2. C语言:利用指针解决:统计一个长度为2的字符串在另外一个字符串中出现的次数。

    //统计一个长度为2的字符串在另外一个字符串中出现的次数. #include <conio.h> #include <stdio.h> #include <string. ...

  3. C语言:对长度为7的字符串,除首尾字符外,将其余5个字符按ASCII降序排序。-计算并输出3~n之间所有素数的平方根之和。

    //对长度为7的字符串,除首尾字符外,将其余5个字符按ASCII降序排序. #include <stdio.h> #include <ctype.h> #include < ...

  4. two pointers思想 ---- 利用两个i, j两个下标,同时对序列进行扫描,以O(n)复杂度解决问题的一种思想

    two pointers思想 ---- 利用两个i, j两个下标,同时对序列进行扫描,以O(n)复杂度解决问题的一种思想, 如果能用这种思想解决问题,那么会大大降低程序的复杂度. 两个利用这个思想的例 ...

  5. 有两个序列A和B,A=(a1,a2,...,ak),B=(b1,b2,...,bk),A和B都按升序排列。对于1<=i,j<=k,求k个最小的(ai+bj)。要求算法尽量高效。

    有两个序列A和B,A=(a1,a2,...,ak),B=(b1,b2,...,bk),A和B都按升序排列.对于1<=i,j<=k,求k个最小的(ai+bj).要求算法尽量高效. int * ...

  6. hdu5795 A Simple Nim 求nim求法,打表找sg值规律 给定n堆石子,每堆有若干石子,两个人轮流操作,每次操作可以选择任意一堆取走任意个石子(不可以为空) 或者选择一堆,把它分成三堆,每堆不为空。求先手必胜,还是后手必胜。

    /** 题目:A Simple Nim 链接:http://acm.hdu.edu.cn/showproblem.php?pid=5795 题意:给定n堆石子,每堆有若干石子,两个人轮流操作,每次操作 ...

  7. 一个自己研究出来的字符串匹配算法-k子串算法

    前言 最近工作中需要写一个算法,而写完这个算法我却发现了一个很有意思的事情.需要的这个算法是这样的:对于A,B两个字符串,找出最多K个公共子串,使得这K个子串长度和最大.百度之没有这样的算法,然后就开 ...

  8. 给出两个单词word1和word2,写一个函数计算出将word1 转换为word2的最少操作次数。

    问题: 给出两个单词word1和word2,写一个函数计算出将word1 转换为word2的最少操作次数. 你总共三种操作方法: 1.插入一个字符 2.删除一个字符 3.替换一个字符 格式: 输入行输 ...

  9. 一个非常好的C#字符串操作处理类StringHelper.cs

    /// <summary> /// 类说明:Assistant /// 编 码 人:苏飞 /// 联系方式:361983679 /// 更新网站:http://www.sufeinet.c ...

  10. 问题 K: 周期串plus

    问题 K: 周期串plus 时间限制: 1 Sec  内存限制: 128 MB提交: 682  解决: 237[提交] [状态] [命题人:外部导入] 题目描述 如果一个字符串可以由某个长度为k的字符 ...

随机推荐

  1. 使用.NET并行任务库(TPL)与并行Linq(PLINQ)充分利用多核性能

    前言 最近比较闲,(项目要转Java被分到架构组,边缘化人员,无所事事 哈哈哈哈) 记录一下前段时间用到的.NET框架下采用并行策略充分利用多核CPU进行优化的一个方法 起因是项目中有个结算的方法,需 ...

  2. SXYZ-6.26模拟赛

    没有爆零,足矣. 发现绍兴一中机房的一个特点:键盘打得贼响!! T1 ctrl 啃臭键在哪里 (中文名我都不好意思大打) 第一遍测T1一分都没得啊! 这跟题目描述自相矛盾有关,导致我只是轻微考虑了一下 ...

  3. LeetCode 1819. 序列中不同最大公约数的数目(数论)

    题目描述 给你一个由正整数组成的数组 nums . 数字序列的 最大公约数 定义为序列中所有整数的共有约数中的最大整数. 例如,序列 [4,6,16] 的最大公约数是 2 . 数组的一个 子序列 本质 ...

  4. 强大的USB协议分析工具

    2020年最后一天了,感谢大家一年来对我文章的支持,有你们的支持就是我强大的动力. 今天来给大家介绍一个USB 协议分析软件LeCroy USB Advisor,软件安装包下载连接如下: 链接:htt ...

  5. 前端导出excel文件,后端返回二进制文件 application/octet-stream 前端处理数据并下载excel文件

    通过URL.createObjectURL(blob)可以获取当前文件的一个内存URL const href = URL.createObjectURL(res.data); const box = ...

  6. ORM的设计思想

    1 以面向对象的思想来完成对于数据库的操作! 2 万物皆对象

  7. 12 Masked Self-Attention(掩码自注意力机制)

    博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 配套 github 链接:https:// ...

  8. 云原生周刊:Dapr v1.11 发布

    开源项目推荐 Kamaji Kamaji 可以大规模地部署和运行 Kubernetes 控制平面,而只需承担一小部分操作负担.Kamaji 的特别之处在于,控制平面组件是在一个单一的 pod 中运行, ...

  9. OpenCV开发笔记(八十一):通过棋盘格使用鱼眼方式标定相机内参矩阵矫正摄像头图像

    前言   对于广角摄像头通过相机图片可以识别出棋盘角点计算相机内参矩阵,通过畸变校准可以得到较好的效果,但是鱼眼摄像头通过这种方式获得周围四周的图像效果并不是很好.所以,鱼眼摄像头在校准上与普通摄像头 ...

  10. 基于wxpython的跨平台桌面应用系统开发

    我曾在随笔<基于Python后端构建多种不同的系统终端界面研究>介绍了多种系统终端界面开发的处理,其中涉及到的wxpython,是一个非常不错的原生界面效果组件,我们可以通过利用其各种界面 ...