• 动态规划计数dp2262. 字符串的总引力


    2022-05-06 19:52:07

    问题描述:

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

    • 例如,"abbca" 的引力为 3 ,因为其中有 3 个不同字符 'a''b' 和 'c' 。

    给你一个字符串 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 。
    

    提示:

    • 1 <= s.length <= 105
    • s 由小写英文字母组成

    问题求解:

    典型的计数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)
    

      

  • 相关阅读:
    Gap 锁
    gap锁 对于unique index 和Ununique index
    透过万科看房地产信息化
    mysql READ-COMMITTED 模式下 行锁不会升级到表级锁
    Mysql RR隔离更新列没有索引 会锁全表
    Oracle 表空间详解
    Oracle 表空间详解
    echarts-多柱子柱状图
    14.2.5.7 Physical Row Structure 物理数据结构:
    echarts-all.js:1 Uncaught TypeError: Cannot read property 'getAttribute' of null
  • 原文地址:https://www.cnblogs.com/hyserendipity/p/16230213.html
Copyright © 2020-2023  润新知