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. Java项目笔记(一)

    一.springboot控制台打印sql日志 ---------.mapper为你启动类扫描的mapper路径 logging.level.---------.mapper = debug 二.前端传 ...

  2. webpack配置 alias用于方便引用文件

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  3. SpringBoot读取properties文件配置项

    使用SpringBoot开发过程中,难免需要配置相关数据项,然后在Java代码中@Autowired注入并使用. 我们应该如何读取properties文件中的配置项呢? 基于SpringBoot项目, ...

  4. 指针进阶(C语言终)

    1. sizeof和strlen的对比 1.1 sizeof 在学习操作符的时候,我们学习了sizeof , sizeof 计算变量所占内存内存空间大小的,单位是 字节,如果操作数是类型的话,计算的是 ...

  5. ASN.1 DER证书私钥的提取

    Java生成的证书在.Net里面无法导入.原因是Java导入的整个ASN.1格式的证书..Net需要设置的只是证书的密钥(公钥.私钥).无法直接使用,因此需要提取密钥. 1.查看密钥 使用lapo.i ...

  6. 使用 FastGPT 工作流实现 AI 赛博算卦,一键生成卦象图

    最近那个男人写的汉语新解火遍了全网,那个男人叫李继刚,国内玩 AI 的同学如果不知道这个名字,可以去面壁思过了. 这个汉语新解的神奇之处就在于它只是一段几百字的提示词,效果却顶得上几千行代码写出来的应 ...

  7. RTCP报文解析

    RTCP包的头部结构体定义 struct RTCP_Header { unsigned short rc:5; unsigned short padding:1; unsigned short ver ...

  8. 人工智能模型训练中的数据之美——探索TFRecord

    上一篇:<构建人工智能模型基础:TFDS和Keras的完美搭配> 序言:在人工智能模型的训练过程中,如何高效管理和处理大量数据是一个重要的课题.TensorFlow 的 TFRecord ...

  9. 一个专注推荐.Net开源项目的榜单

    大家好,我是编程乐趣,从7月份开始推荐开源项目,已经推荐了接近100个开源项目了,其中绝大部分是有关.Net的开源项目,也受到大家非常多人的喜欢. 由于公众号不方便查询,很多人又想了解更多的开源项目, ...

  10. Python基础快速入门

    1).Python运算符 1.Python算数运算符 描述: 例子: a = 21 b = 10 c = 0 c = a + b #31 c = a - b #11 c = a * b #210 c ...