该题解使用了一个嵌套循环的方法,外层循环遍历字符串s的所有可能的起始位置i,内层循环遍历从位置i开始的所有可能的结束位置j。对于每个子字符串s[i:j+1],使用一个哈希表h来记录每个字符的出现次数。同时,记录并更新当前子字符串中出现最频繁的字符的出现次数maxVal和出现最少的字符的出现次数minVal。每次内循环计算出一个新的子字符串时,都会更新哈希表,并重新计算maxVal和minVal,然后计算当前子字符串的美丽值(maxVal - minVal),并将其累加到总计数cnt中。最终返回总计数cnt作为所有子字符串的美丽值之和。
时间复杂度: O(n^2 * k)
空间复杂度: O(1)
class Solution:
def beautySum(self, s: str) -> int:
l = len(s)
cnt = 0
for i in range(l):
h = {}
maxVal, minVal = 0, 0
for j in range(i, l):
if s[j] not in h: h[s[j]] = 0 # 若字符未在哈希表中,则初始化为0
h[s[j]] += 1 # 更新字符出现频率
maxVal = max(maxVal, h[s[j]]) # 更新最高频率
minVal = min(h.values()) # 查找最低频率
cnt += maxVal - minVal # 计算并累加当前子字符串的美丽值
return cnt # 返回所有子字符串的美丽值之和