Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >2024-12-19:分割字符频率相等的最少子字符串

2024-12-19:分割字符频率相等的最少子字符串

作者头像
福大大架构师每日一题
发布于 2024-12-19 10:43:49
发布于 2024-12-19 10:43:49
7400
代码可运行
举报
运行总次数:0
代码可运行

2024-12-19:分割字符频率相等的最少子字符串。用go语言,给定一个字符串 s,你需要将其分割成一个或多个“平衡”子字符串。所谓“平衡”字符串是指其中所有字符出现的次数相同。例如,对于 s = "ababcc",你可以得到多个合法的分割方式,如 ("abab", "c", "c")、("ab", "abc", "c") 和 ("ababcc")。然而,像 ("a", "bab", "cc")、("aba", "bc", "c") 和 ("ab", "abcc") 这样的分割则是不合法的。请你返回将 s 最少分割成多少个平衡子字符串。

请注意,平衡字符串的定义是:字符串中每个字符的出现次数必须一致。

1 <= s.length <= 1000。

s 只包含小写英文字母。

答案2024-12-19:

chatgpt[1]

题目来自leetcode3144。

大体步骤如下:

1.创建一个字典来存储字符出现的次数。

2.遍历字符串 s,统计每个字符出现的次数。

3.维护一个计数器 count,用来表示当前正在构建的平衡子字符串的数量。

4.遍历 s 中的每个字符,如果当前字符加入后仍能保持平衡,则继续构建同一平衡子字符串,否则增加 count 并重新开始构建下一个平衡子字符串。

5.返回 count 即可得到最少分割的平衡子字符串数量。

时间复杂度:遍历字符串 s 需要 O(n) 的时间复杂度,其中 n 是字符串 s 的长度,因此总体时间复杂度为 O(n)。

空间复杂度:使用一个字典来存储字符出现的次数,额外空间复杂度为 O(1)。

Go完整代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package main

import(
"fmt"
)

const inf =0x3f3f3f3f

funcminimumSubstringsInPartition(s string)int{
    n :=len(s)
    d :=make([]int, n+1)
for i :=range d {
        d[i]= inf
}
    d[0]=0

for i :=1; i <= n; i++{
        maxCnt :=0
        occCnt :=make(map[byte]int)
for j := i; j >=1; j--{
            occCnt[s[j-1]]++
if occCnt[s[j-1]]> maxCnt {
                maxCnt = occCnt[s[j-1]]
}
if maxCnt*len(occCnt)==(i-j+1)&& d[j-1]!= inf {
if d[i]> d[j-1]+1{
                    d[i]= d[j-1]+1
}
}
}
}
return d[n]
}

funcmain(){
    s :="fabccddg"
    fmt.Println(minimumSubstringsInPartition(s))
}

Rust完整代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const INF:i32=0x3f3f3f3f;

fnminimum_substrings_in_partition(s:&str)->i32{
letn= s.len();
letmut d=vec![INF; n +1];
    d[0]=0;

foriin1..=n {
letmut max_cnt=0;
letmut occ_cnt: std::collections::HashMap<u8,i32>= std::collections::HashMap::new();

forjin(1..=i).rev(){
letch= s.as_bytes()[j -1];
*occ_cnt.entry(ch).or_insert(0)+=1;

if occ_cnt[&ch]> max_cnt {
                max_cnt = occ_cnt[&ch];
}

if max_cnt * occ_cnt.len()asi32==(i - j +1)asi32&& d[j -1]!= INF {
                d[i]= d[i].min(d[j -1]+1);
}
}
}

    d[n]
}

fnmain(){
lets="fabccddg";
println!("{}",minimum_substrings_in_partition(s));
}
引用链接

[1] chatgpt: https://chatbotsplace.com/?rc=nnNWSCJ7EP

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-12-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 福大大架构师每日一题 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
2023-08-20:用go语言写算法。给定一个由'W'、'A'、'S'、'D'四种字符组成的字符串,长度一定是4的倍数, 你
2023-08-20:用go语言写算法。给定一个由'W'、'A'、'S'、'D'四种字符组成的字符串,长度一定是4的倍数,
福大大架构师每日一题
2023/08/29
1740
2023-08-20:用go语言写算法。给定一个由'W'、'A'、'S'、'D'四种字符组成的字符串,长度一定是4的倍数,  你
2025-03-14:统计 1 显著的字符串的数量。用go语言,给定一个二进制字符串 s,请你计算其中被称为“1 显著”的子字符
2025-03-14:统计 1 显著的字符串的数量。用go语言,给定一个二进制字符串 s,请你计算其中被称为“1 显著”的子字符串的数量。
福大大架构师每日一题
2025/03/14
580
2025-03-14:统计 1 显著的字符串的数量。用go语言,给定一个二进制字符串 s,请你计算其中被称为“1 显著”的子字符
2025-04-23:形成目标字符串需要的最少字符串数Ⅱ。用go语言,给定一个字符串数组 words 和一个目标字符串 targ
2025-04-23:形成目标字符串需要的最少字符串数Ⅱ。用go语言,给定一个字符串数组 words 和一个目标字符串 target。
福大大架构师每日一题
2025/04/23
260
2025-04-23:形成目标字符串需要的最少字符串数Ⅱ。用go语言,给定一个字符串数组 words 和一个目标字符串 targ
2024-05-18:用go语言,给定一个从 0 开始的字符串 s,以及两个子字符串 a 和 b,还有一个整数 k。 定义一个“
2024-05-18:用go语言,给定一个从 0 开始的字符串 s,以及两个子字符串 a 和 b,还有一个整数 k。
福大大架构师每日一题
2024/05/27
1230
2024-05-18:用go语言,给定一个从 0 开始的字符串 s,以及两个子字符串 a 和 b,还有一个整数 k。 定义一个“
LeetCode字符串高频题目整理(持续更新中)
  给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
嵌入式与Linux那些事
2021/05/20
1.3K0
2024-12-14:K 周期字符串需要的最少操作次数。用go语言,给定一个长度为n的字符串 word 和一个整数k,k是n的因
2024-12-14:K 周期字符串需要的最少操作次数。用go语言,给定一个长度为n的字符串 word 和一个整数k,k是n的因数。每次操作可以选择两个下标i和j,使得i和j都可以被k整除,然后用从j开始的长度为k的子串替换从i开始的长度为k的子串。要使得word成为一个K周期字符串,需要进行最少的操作次数。
福大大架构师每日一题
2024/12/19
670
2024-12-14:K 周期字符串需要的最少操作次数。用go语言,给定一个长度为n的字符串 word 和一个整数k,k是n的因
2024-10-08:用go语言,给定一个字符串 word 和一个整数 k,判断是否可以通过删除最少数量的字符使得该字符串成为
2024-10-08:用go语言,给定一个字符串 word 和一个整数 k,判断是否可以通过删除最少数量的字符使得该字符串成为 k 特殊字符串。
福大大架构师每日一题
2024/10/10
820
2024-10-08:用go语言,给定一个字符串 word 和一个整数 k,判断是否可以通过删除最少数量的字符使得该字符串成为
2023-07-29:给你一个由数字组成的字符串 s,返回 s 中独特子字符串数量。 其中的每一个数字出现的频率都相同。
2023-07-29:给你一个由数字组成的字符串 s,返回 s 中独特子字符串数量。
福大大架构师每日一题
2023/08/10
2120
2023-07-29:给你一个由数字组成的字符串 s,返回 s 中独特子字符串数量。 其中的每一个数字出现的频率都相同。
2024-11-25:满足距离约束且字典序最小的字符串。用go语言,给定一个字符串 s 和一个整数 k,我们需要定义一个函数 d
2024-11-25:满足距离约束且字典序最小的字符串。用go语言,给定一个字符串 s 和一个整数 k,我们需要定义一个函数 distance(s1, s2) 来计算两个长度相同的字符串 s1 和 s2 之间的距离。这个距离的定义是:对于每个索引 i(范围从 0 到 n-1),找出字符 s1[i] 和 s2[i] 之间的最小循环距离,并将这些最小距离相加。
福大大架构师每日一题
2024/11/26
1470
2024-11-25:满足距离约束且字典序最小的字符串。用go语言,给定一个字符串 s 和一个整数 k,我们需要定义一个函数 d
2024-12-20:两个字符串的排列差。用go语言,给定两个字符串 s 和 t,每个字符串中的字符都是唯一的,并且 t 是 s
2024-12-20:两个字符串的排列差。用go语言,给定两个字符串 s 和 t,每个字符串中的字符都是唯一的,并且 t 是 s 的一种排列。
福大大架构师每日一题
2024/12/20
980
2024-12-20:两个字符串的排列差。用go语言,给定两个字符串 s 和 t,每个字符串中的字符都是唯一的,并且 t 是 s
2023-05-08:我们定义了一个函数 countUniqueChars(s) 来统计字符串 s 中的唯一字符, 并返回唯一字符的个数。 例如:s = “LE
2023-05-08:我们定义了一个函数 countUniqueChars(s) 来统计字符串 s 中的唯一字符,
福大大架构师每日一题
2023/05/08
3520
2023-05-08:我们定义了一个函数 countUniqueChars(s) 来统计字符串 s 中的唯一字符, 并返回唯一字符的个数。 例如:s = “LE
2023-08-18:用go写算法。你会得到一个字符串 text,你应该把它分成 k 个子字符串 (subtext1, subt
你应该把它分成 k 个子字符串 (subtext1, subtext2,…, subtextk)。
福大大架构师每日一题
2023/08/29
2090
2023-08-18:用go写算法。你会得到一个字符串 text,你应该把它分成 k 个子字符串 (subtext1, subt
2024-11-27:字符串的分数。用go语言,给定一个字符串 s,我们可以定义其“分数”为相邻字符的 ASCII 码差值绝对值
2024-11-27:字符串的分数。用go语言,给定一个字符串 s,我们可以定义其“分数”为相邻字符的 ASCII 码差值绝对值的总和。
福大大架构师每日一题
2024/11/28
830
2024-11-27:字符串的分数。用go语言,给定一个字符串 s,我们可以定义其“分数”为相邻字符的 ASCII 码差值绝对值
LeetCode 1759. 统计同构子字符串的数目
给你一个字符串 s ,返回 s 中 同构子字符串 的数目。 由于答案可能很大,只需返回对 10^9 + 7 取余 后的结果。
Michael阿明
2021/09/07
4760
2022-09-01:字符串的 波动 定义为子字符串中出现次数 最多 的字符次数与出现次数 最少 的字符次数之差。 给你一个字符串 s ,它只包含小写英文字母。
2022-09-01:字符串的 波动 定义为子字符串中出现次数 最多 的字符次数与出现次数 最少 的字符次数之差。
福大大架构师每日一题
2022/09/01
4680
2022-09-01:字符串的 波动 定义为子字符串中出现次数 最多 的字符次数与出现次数 最少 的字符次数之差。 给你一个字符串 s ,它只包含小写英文字母。
2024-11-13:求出所有子序列的能量和。用go语言,给定一个整数数组nums和一个正整数k, 定义一个子序列的能量为子序列
2024-11-13:求出所有子序列的能量和。用go语言,给定一个整数数组nums和一个正整数k,
福大大架构师每日一题
2024/11/14
970
2024-11-13:求出所有子序列的能量和。用go语言,给定一个整数数组nums和一个正整数k, 定义一个子序列的能量为子序列
2024-10-16:用go语言,找出一个字符串中每个字符最多出现两次的最长子串,并返回该子串的最大长度。 输入: s = “b
2024-10-16:用go语言,找出一个字符串中每个字符最多出现两次的最长子串,并返回该子串的最大长度。
福大大架构师每日一题
2024/10/21
1140
2024-10-16:用go语言,找出一个字符串中每个字符最多出现两次的最长子串,并返回该子串的最大长度。 输入: s = “b
​LeetCode刷题实战97:交错字符串
https://leetcode-cn.com/problems/interleaving-string/
程序员小猿
2021/01/19
3430
​LeetCode刷题实战97:交错字符串
2025-03-27:统计满足 K 约束的子字符串数量Ⅰ。用go语言,给定一个二进制字符串 s 和一个整数 k,定义满足 k 约
2025-03-27:统计满足 K 约束的子字符串数量Ⅰ。用go语言,给定一个二进制字符串 s 和一个整数 k,定义满足 k 约束的条件为:
福大大架构师每日一题
2025/03/27
460
2025-03-27:统计满足 K 约束的子字符串数量Ⅰ。用go语言,给定一个二进制字符串 s 和一个整数 k,定义满足 k 约
2024-09-28:用go语言,给定一个字符串s,要求判断是否存在一个长度为2的子字符串, 在其反转后的字符串中也存在相同的子
2024-09-28:用go语言,给定一个字符串s,要求判断是否存在一个长度为2的子字符串,
福大大架构师每日一题
2024/09/29
1460
2024-09-28:用go语言,给定一个字符串s,要求判断是否存在一个长度为2的子字符串, 在其反转后的字符串中也存在相同的子
推荐阅读
2023-08-20:用go语言写算法。给定一个由'W'、'A'、'S'、'D'四种字符组成的字符串,长度一定是4的倍数, 你
1740
2025-03-14:统计 1 显著的字符串的数量。用go语言,给定一个二进制字符串 s,请你计算其中被称为“1 显著”的子字符
580
2025-04-23:形成目标字符串需要的最少字符串数Ⅱ。用go语言,给定一个字符串数组 words 和一个目标字符串 targ
260
2024-05-18:用go语言,给定一个从 0 开始的字符串 s,以及两个子字符串 a 和 b,还有一个整数 k。 定义一个“
1230
LeetCode字符串高频题目整理(持续更新中)
1.3K0
2024-12-14:K 周期字符串需要的最少操作次数。用go语言,给定一个长度为n的字符串 word 和一个整数k,k是n的因
670
2024-10-08:用go语言,给定一个字符串 word 和一个整数 k,判断是否可以通过删除最少数量的字符使得该字符串成为
820
2023-07-29:给你一个由数字组成的字符串 s,返回 s 中独特子字符串数量。 其中的每一个数字出现的频率都相同。
2120
2024-11-25:满足距离约束且字典序最小的字符串。用go语言,给定一个字符串 s 和一个整数 k,我们需要定义一个函数 d
1470
2024-12-20:两个字符串的排列差。用go语言,给定两个字符串 s 和 t,每个字符串中的字符都是唯一的,并且 t 是 s
980
2023-05-08:我们定义了一个函数 countUniqueChars(s) 来统计字符串 s 中的唯一字符, 并返回唯一字符的个数。 例如:s = “LE
3520
2023-08-18:用go写算法。你会得到一个字符串 text,你应该把它分成 k 个子字符串 (subtext1, subt
2090
2024-11-27:字符串的分数。用go语言,给定一个字符串 s,我们可以定义其“分数”为相邻字符的 ASCII 码差值绝对值
830
LeetCode 1759. 统计同构子字符串的数目
4760
2022-09-01:字符串的 波动 定义为子字符串中出现次数 最多 的字符次数与出现次数 最少 的字符次数之差。 给你一个字符串 s ,它只包含小写英文字母。
4680
2024-11-13:求出所有子序列的能量和。用go语言,给定一个整数数组nums和一个正整数k, 定义一个子序列的能量为子序列
970
2024-10-16:用go语言,找出一个字符串中每个字符最多出现两次的最长子串,并返回该子串的最大长度。 输入: s = “b
1140
​LeetCode刷题实战97:交错字符串
3430
2025-03-27:统计满足 K 约束的子字符串数量Ⅰ。用go语言,给定一个二进制字符串 s 和一个整数 k,定义满足 k 约
460
2024-09-28:用go语言,给定一个字符串s,要求判断是否存在一个长度为2的子字符串, 在其反转后的字符串中也存在相同的子
1460
相关推荐
2023-08-20:用go语言写算法。给定一个由'W'、'A'、'S'、'D'四种字符组成的字符串,长度一定是4的倍数, 你
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验