在 Python 中查找字符串排序形式的回文子串计数


假设我们有一个小写字符的字符串(全是 ASCII 字符),我们需要找到给定字符串的所有不同的连续回文子串。

所以,如果输入是“level”,那么输出将是 7,因为有七个子串 ['level', 'eve', 'l', 'e', 'v', 'e', 'l']。

为了解决这个问题,我们将遵循以下步骤:

  • N := 26

  • n := 字符串长度

  • sum := 0

  • my_map := 一个大小为 N 的列表,并填充 0

  • 对于 i 从 0 到 n,执行:

    • my_map[str[i] 的 ASCII 值 - 'a' 的 ASCII 值] := my_map[str[i] 的 ASCII 值 - 'a' 的 ASCII 值] + 1

  • 对于 i 从 0 到 N,执行:

    • 如果 my_map[i] 非零,则

      • sum := sum + (my_map[i] * (my_map[i] + 1) / 2)

  • 返回 sum

示例

让我们看看下面的实现,以便更好地理解:

在线演示

N = 26
def all_palindrome_substr_count(str):
   n = len (str)
   sum = 0
   my_map = [0] * N
   for i in range(n):
      my_map[ord(str[i]) - ord('a')] += 1
  for i in range(N) :
      if (my_map[i]):
         sum += (my_map[i] * (my_map[i] + 1) // 2)
   return sum
str = "level"
print (all_palindrome_substr_count(str))

输入

"level"

输出

7

更新于:2020-08-19

158 次浏览

开始您的职业生涯

完成课程获得认证

开始
广告
© . All rights reserved.