其他分享
首页 > 其他分享> > 动态规划-计数dp-2262. 字符串的总引力

动态规划-计数dp-2262. 字符串的总引力

作者:互联网

2022-05-06 19:52:07

问题描述:

字符串的 引力 定义为:字符串中 不同 字符的数量。

给你一个字符串 s ,返回 其所有子字符串的总引力 。

子字符串 定义为:字符串中的一个连续字符序列。

 

示例 1:

输入:s = "abbca"
输出:28
解释:"abbca" 的子字符串有:
- 长度为 1 的子字符串:"a"、"b"、"b"、"c"、"a" 的引力分别为 1、1、1、1、1,总和为 5 。
- 长度为 2 的子字符串:"ab"、"bb"、"bc"、"ca" 的引力分别为 2、1、2、2 ,总和为 7 。
- 长度为 3 的子字符串:"abb"、"bbc"、"bca" 的引力分别为 2、2、3 ,总和为 7 。
- 长度为 4 的子字符串:"abbc"、"bbca" 的引力分别为 3、3 ,总和为 6 。
- 长度为 5 的子字符串:"abbca" 的引力为 3 ,总和为 3 。
引力总和为 5 + 7 + 7 + 6 + 3 = 28 。

示例 2:

输入:s = "code"
输出:20
解释:"code" 的子字符串有:
- 长度为 1 的子字符串:"c"、"o"、"d"、"e" 的引力分别为 1、1、1、1 ,总和为 4 。
- 长度为 2 的子字符串:"co"、"od"、"de" 的引力分别为 2、2、2 ,总和为 6 。
- 长度为 3 的子字符串:"cod"、"ode" 的引力分别为 3、3 ,总和为 6 。
- 长度为 4 的子字符串:"code" 的引力为 4 ,总和为 4 。
引力总和为 4 + 6 + 6 + 4 = 20 。

 

提示:

问题求解:

典型的计数dp问题,考虑每个后缀的贡献即可。

class Solution:
    def appealSum(self, s: str) -> int:
        n = len(s)
        record = {}
        dp = [0] * n
        dp[0] = 1
        record[s[0]] = 0
        for i in range(1, n):
            idx = record.get(s[i], -1)
            if idx == -1:
                dp[i] = dp[i - 1] + i + 1
            else:
                dp[i] = dp[i - 1] + i - idx
            record[s[i]] = i
        return sum(dp)

  

 

标签:引力,record,计数,字符串,2262,长度,dp,总和
来源: https://www.cnblogs.com/hyserendipity/p/16230213.html