1781.所有子字符串美丽值之和
【LetMeFly】1781.所有子字符串美丽值之和
力扣题目链接:https://leetcode.cn/problems/sum-of-beauty-of-all-substrings/
一个字符串的 美丽值 定义为:出现频率最高字符与出现频率最低字符的出现次数之差。
- 比方说,
"abaacc"
的美丽值为3 - 1 = 2
。
给你一个字符串 s
,请你返回它所有子字符串的 美丽值 之和。
示例 1:
输入:s = "aabcb" 输出:5 解释:美丽值不为零的字符串包括 ["aab","aabc","aabcb","abcb","bcb"] ,每一个字符串的美丽值都为 1 。
示例 2:
输入:s = "aabcbaa" 输出:17
提示:
1 <= s.length <= 500
s
只包含小写英文字母。
方法一:前缀和
我们分别统计出26种字母的前缀和
这样,我们只需要枚举子串区间(两重循环枚举子串首尾),再统计出这个区间中,字母的最大和最小出现频率,累加到答案中即可。
- 时间复杂度$O(len(s)^2C)$,其中$C=26$
- 空间复杂度$O(len(s)C)$
AC代码
C++
1 |
|
方法二:边遍历边计算
方法一中,我们预处理使用前缀和计算出了每种元素的出现情况。但是每种字母的前缀和都需要$O(len(s))$的空间复杂度来保存
方法二中,我们不提前预处理计算出字母的出现情况,而是在枚举字符串终点的同时计算。这样,空间复杂度就减小了一个维度。
- 时间复杂度$O(len(s)^2C)$,其中$C=26$
- 空间复杂度$O(C)$,相比于前缀和,我们没有提前计算出每个元素的前缀和情况,而是枚举子串终点的过程中计算。因此,空间复杂度少了一个维度(字符串的长度)
AC代码
C++
1 |
|
同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/128285137
1781.所有子字符串美丽值之和
https://blog.letmefly.xyz/2022/12/12/LeetCode 1781.所有子字符串美丽值之和/