在Python中计算字符串的每个子字符串的不同字符数的程序

在Python中计算字符串的每个子字符串的不同字符数的程序

假设我们有一个小写字符串s,我们必须查找s的每个子字符串中都不同的字符计数的总和。如果答案非常大,则返回结果mod 10^9+7。

因此,如果输入是s =“xxy”,则输出将是6,因为子字符串和它们的计数如下 –

  • “x”:1

  • “x”:1

  • “y”:1

  • “xx”:0(因为“x”不是唯一的)

  • “xy”:2

  • “xxy”:1(因为“x”不是唯一的)

要解决这个问题,我们将遵循以下步骤 –

  • m := 10 ^ 9 + 7

  • prev_seen :=一个新的空映射

  • ans := 0

  • 定义一个函数util()。这将取i,符号

  • prev_seen [symbol]:=一个具有单个值-1的列表

  • prev:= prev_seen [symbol]

  • 将i插入到最后prev

  • 如果prev的大小> 2,则

    • left:= prev的第一个元素,并删除prev的第一个元素

    • middle:=prev [0],right:= prev [1]

    • cnt:=(middle-left)*(right-middle)

    • ans: =(ans + cnt)mod m

  • 对于s中的每个索引i和值符号,执行

    • util(i,symbol)
  • 对于prev_seen中的每个符号,执行
    • util(s的大小,符号)
  • return ans

让我们看以下实现以更好地理解 –

更多Python相关文章,请阅读:Python 教程

示例

class Solution:
   def solve(self, s):
      m = 10 ** 9 + 7
      prev_seen = {}
      ans = 0
      def util(i, symbol):
         nonlocal ans
         prev = prev_seen.setdefault(symbol, [-1])
         prev.append(i)
         if len(prev)> 2:
            left = prev.pop(0)
            middle, right = prev
            cnt =(middle - left)*(right-middle)
            ans =(ans + cnt)% m
      for i, symbol in enumerate(s):
         util(i, symbol)
      for symbol in prev_seen:
         util(len(s), symbol)
      return ans
ob = Solution()
s =“xxy”
print(ob.solve(s))

输入

xxy

输出

6
“`

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程