力扣(LeetCode)1781. 所有子字符串美丽值之和(C++)
模拟 & 哈希集合
使用哈希集合,开字符集,下标对应小写字母顺序,值对应字符出现次数。 所有子字符串,根据示例看出,是连续子字符串。那么枚举起点,再枚举子字符串长度,就是所有连续子字符串。在枚举过程中,维护区间的字符出现次数(哈希集合)。计算美丽值,只用遍历哈希集合,维护出现最多次数和最少次数。统计美丽值,即为所求。
class Solution {
public:
int beautySum(string s) {
int ans = 0;
for(int i = 0 ;i < s.size() ; i++){
int cnt[26] = {
0};
for(int j = i ;j < s.size();j++){
int Max = 0 ,Min = 1000;
cnt[s[j]-a]++;
for(char ch = a;ch<=z;ch++)
if(cnt[ch-a]){
Max = max (Max,cnt[ch-a]);
Min = min (Min,cnt[ch-a]);
}
ans += Max - Min;
}
}
return ans;
}
};
- 时间复杂度 : O ( n 2 × ∣ C ∣ ) O(n^2 imes |C|) O(n2×∣C∣) , n n n 是字符串长度, ∣ C ∣ |C| ∣C∣ 是字符集大小,枚举所有子字符串的的时间复杂度 O ( n 2 ) O(n^2) O(n2) ,计算美丽值的时间复杂度 O ( ∣ C ∣ ) O(|C|) O(∣C∣) ,二者是乘积关系,总时间复杂度 O ( n 2 × ∣ C ∣ ) O(n^2 imes |C|) O(n2×∣C∣) 。
- 空间复杂度 : O ( ∣ C ∣ ) O(|C|) O(∣C∣) , 哈希集合的空间复杂度 O ( ∣ C ∣ ) O(|C|) O(∣C∣) 。
AC
致语
-
理解思路很重要 读者有问题请留言,清墨看到就会回复的。
下一篇:
lc刷题总结(贪心算法第一次)
