3442.奇偶频次间的最大差值 I:计数

【LetMeFly】3442.奇偶频次间的最大差值 I:计数

力扣题目链接:https://leetcode.cn/problems/maximum-difference-between-even-and-odd-frequency-i/

给你一个由小写英文字母组成的字符串 s 。请你找出字符串中两个字符的出现频次之间的 最大 差值,这两个字符需要满足:

  • 一个字符在字符串中出现 偶数次
  • 另一个字符在字符串中出现 奇数次 。

返回 最大 差值,计算方法是出现 奇数次 字符的次数 减去 出现 偶数次 字符的次数。

 

示例 1:

输入:s = "aaaaabbc"

输出:3

解释:

  • 字符 'a' 出现 奇数次 ,次数为 5 ;字符 'b' 出现 偶数次 ,次数为 2 。
  • 最大差值为 5 - 2 = 3 。

示例 2:

输入:s = "abcabcab"

输出:1

解释:

  • 字符 'a' 出现 奇数次 ,次数为 3 ;字符 'c' 出现 偶数次 ,次数为 2 。
  • 最大差值为 3 - 2 = 1

 

提示:

  • 3 <= s.length <= 100
  • s 仅由小写英文字母组成。
  • s 至少由一个出现奇数次的字符和一个出现偶数次的字符组成。

解题方法:计数

遍历一遍字符串,统计出每种字符的出现次数。

遍历英文单词的每种字符:

  • 若这种字符出现次数为奇数次,则更新a1的值
  • 否则若这种字符出现次数大于0,则更新a2的值

最终返回$a_1-a_2$。

  • 时间复杂度$O(len(s)+C)$,其中$C=26$
  • 空间复杂度$O(C)$

AC代码

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/*
* @Author: LetMeFly
* @Date: 2025-06-10 23:07:14
* @LastEditors: LetMeFly.xyz
* @LastEditTime: 2025-06-10 23:14:08
*/
class Solution {
public:
int maxDifference(string s) {
int cnt[26] = {0};
for (char c : s) {
cnt[c - 'a']++;
}
int a1 = 0, a2 = 100;
for (int c : cnt) {
if (c % 2) {
a1 = max(a1, c);
} else if (c) {
a2 = min(a2, c);
}
}
return a1 - a2;
}
};

Python

1
2
3
4
5
6
7
8
9
10
11
12
'''
Author: LetMeFly
Date: 2025-06-10 23:07:14
LastEditors: LetMeFly.xyz
LastEditTime: 2025-06-10 23:18:45
'''
from collections import Counter

class Solution:
def maxDifference(self, s: str) -> int:
cnt = Counter(s)
return max(v for v in cnt.values() if v % 2) - min(v for v in cnt.values() if v % 2 == 0)

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*
* @Author: LetMeFly
* @Date: 2025-06-10 23:07:14
* @LastEditors: LetMeFly.xyz
* @LastEditTime: 2025-06-10 23:40:04
*/
class Solution {
public int maxDifference(String s) {
int[] cnt = new int[26];
for (char c : s.toCharArray()) {
cnt[c - 'a']++;
}
int a1 = 0, a2 = 100;
for (int t : cnt) {
if (t % 2 == 1) {
a1 = Math.max(a1, t);
} else if (t > 0) {
a2 = Math.min(a2, t);
}
}
return a1 - a2;
}
}

Go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*
* @Author: LetMeFly
* @Date: 2025-06-10 23:07:14
* @LastEditors: LetMeFly.xyz
* @LastEditTime: 2025-06-10 23:20:56
*/
package main

func maxDifference(s string) int {
cnt := [26]int{}
for _, c := range s {
cnt[c - 'a']++
}
a1, a2 := 0, 100
for _, t := range cnt {
if t % 2 == 1 {
a1 = max(a1, t)
} else if t > 0 {
a2 = min(a2, t)
}
}
return a1 - a2
}

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源


3442.奇偶频次间的最大差值 I:计数
https://blog.letmefly.xyz/2025/06/10/LeetCode 3442.奇偶频次间的最大差值I/
作者
发布于
2025年6月10日
许可协议