Leetcode 1781. 所有子字符串美丽值之和

题目

Leetcode 1781. 所有子字符串美丽值之和_第1张图片

思路

  这道题的思路并不复杂,直接“遍历”所有子串,求出每个子串的美丽值之和。但是我在做的时候踩了两个坑:
         1.不能真的去遍历所有子串。正确的做法是进行二重循环,并在每次外层循环开始时设立一个字典变量存储每个子串所包含的每个字母的个数。当内层循环加1时,只用将内层循环当前指向的字母数量加1即可,这样避免了对于每个子串都重新统计其所包含的各个字母数量。

         2.在统计出现次数最少的字母时需要注意,不能按照传统方法,直接设置变量然后遍历一次寻找最小值,因为有可能有的字母没有出现过,这种情况并不在题目的统计范围中。因此这里推荐使用字典存储字母数量,然后用字母的values()方法进行统计,这样可以避免统计到未出现的字母。

代码

 

class Solution:
    def beautySum(self, s: str) -> int:
        n=len(s)
        summ=0
        dic={}
        for i in range(n):
            dic={}
            dic[ord(s[i])-ord('a')]=dic.get(ord(s[i])-ord('a'),0)+1
            for j in range(i+1,n):
                dic[ord(s[j])-ord('a')]=dic.get(ord(s[j])-ord('a'),0)+1
                templist=dic.values()
                maxx=max(templist)
                minn=min(templist)
                summ+=maxx-minn
                #print(temp,maxx-minn)
        return summ

 

你可能感兴趣的:(leetcode,python,字符串)