【2022-12-12每日一题】1781. 所有子字符串美丽值之和[Medium]
2022-12-12
1分钟阅读时长
2022-12-12每日一题:1781. 所有子字符串美丽值之和
难度:Medium
标签:哈希表 、 字符串 、 计数
一个字符串的 美丽值 定义为:出现频率最高字符与出现频率最低字符的出现次数之差。
- 比方说,
"abaacc"
的美丽值为3 - 1 = 2
。
给你一个字符串 s
,请你返回它所有子字符串的 美丽值 之和。
示例 1:
输入:s = "aabcb" 输出:5 解释:美丽值不为零的字符串包括 ["aab","aabc","aabcb","abcb","bcb"] ,每一个字符串的美丽值都为 1 。
示例 2:
输入:s = "aabcbaa" 输出:17
提示:
1 <= s.length <= 500
s
只包含小写英文字母。
方法一:暴力枚举+计数
func beautySum(s string) (ans int) {
for i := 0; i < len(s); i++ {
cnt, mx := [26]int{}, 0
for j := i; j < len(s); j++ {
cnt[s[j]-'a']++
mx = max(mx, cnt[s[j]-'a'])
mi := len(s)
for _, c := range cnt {
if c > 0 {
mi = min(mi, c)
}
}
ans += mx-mi
}
}
return ans
}
func min(a, b int) int {
if a < b {
return a
}
return b
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
复杂度分析
时间复杂度:$O(C×n^2)$,其中 C 是 s 的元素种类,n 是 s 的长度。
空间复杂度:O(C)。