2025-08-11:奇偶频次间的最大差值Ⅰ 用go语言,给定一个只含小
发布时间:2025-08-11 07:51 浏览量:1
2025-08-11:奇偶频次间的最大差值Ⅰ。用go语言,给定一个只含小写字母的字符串 s。对任意两个字符 x 和 y(它们在 s 中的出现次数分别记为 count(x)、count(y)),当 count(x) 是奇数且 count(y) 是偶数时,考虑差值 count(x)−count(y)。在所有满足条件的字符对中取最大的差值并返回。这里 count(c) 表示字符 c 在字符串 s 中出现的次数。
3
s 仅由小写英文字母组成。
s 至少由一个出现奇数次的字符和一个出现偶数次的字符组成。
输入:s = "aaaaabbc"。
输出:3。
解释:
字符 'a' 出现 奇数次 ,次数为 5 ;字符 'b' 出现 偶数次 ,次数为 2 。
最大差值为 5 - 2 = 3 。
题目来自力扣3442。
1. 统计字符频次:
• 创建一个映射(map)c,键为字符(rune),值为该字符在字符串中出现的次数。
• 遍历字符串 s 的每个字符,更新映射 c 中的计数值。例如:
• 字符 'a' 出现 5 次,c['a'] = 5
• 字符 'b' 出现 2 次,c['b'] = 2
• 字符 'c' 出现 1 次,c['c'] = 1
2. 初始化关键变量:
• maxOdd:记录所有奇数频次中的最大值,初始化为 1(因奇数频次至少为 1)。
• minEven:记录所有偶数频次中的最小值,初始化为字符串长度(例如 len(s) = 8),这是一个安全的上限值。
3. 遍历频次映射,更新关键变量:
• 对映射 c 中的每个频次值 value:
• 若 value 是奇数(value % 2 == 1):
• 比较 value 与当前 maxOdd,更新 maxOdd = max(maxOdd, value)。
• 例如:value = 5('a')时,maxOdd 从 1 更新为 5;value = 1('c')时,maxOdd 保持 5。
• 若 value 是偶数(value % 2 == 0):
• 比较 value 与当前 minEven,更新 minEven = min(minEven, value)。
• 例如:value = 2('b')时,minEven 从 8 更新为 2。
4. 计算并返回结果:
• 返回差值 maxOdd - minEven。
• 例如:maxOdd = 5('a'),minEven = 2('b'),结果为 5 - 2 = 3。
• 时间复杂度:O(n),其中 n 是字符串长度。
遍历字符串统计频次:O(n)。遍历频次映射:映射键的数量最多为 26(小写字母),是常数操作 O(1)。• 额外空间复杂度:O(1)。
.
package mainimport ( "fmt")func maxDifference(s string)int { c := make(map[rune]int) for _, ch := range s { c[ch]++ } maxOdd, minEven := 1, len(s) for _, value := range c { if value%2 == 1 { maxOdd = max(maxOdd, value) } else { minEven = min(minEven, value) } } return maxOdd - minEven}func main { s := "aaaaabbc" result := maxDifference(s) fmt.Println(result)}.
# -*-coding:utf-8-*-from collections import Counterdef max_difference(s: str) -> int: counts = Counter(s) max_odd = 1 min_even = len(s) for v in counts.values: if v % 2 == 1: max_odd = max(max_odd, v) else: min_even = min(min_even, v) return max_odd - min_evenif __name__ == "__main__": s = "aaaaabbc" result = max_difference(s) print(result)我们相信Go语言和算法为普通开发者提供了困境的“面试利器”,并致力于分享全面的编程知识。在这里,您可以找到最新的Go语言教程、算法解析、提升面试竞争力的秘籍以及行业动态。
·