📅  最后修改于: 2023-12-03 14:58:17.139000             🧑  作者: Mango
本文将介绍如何统计长度为k的回文子序列数,其中k <= 3。
回文子序列指的是一个序列,将它倒叙排列后得到的新序列与原序列相同,但不要求连续。
例如,在序列 "abcdba" 中,"abcba" 是一个回文子序列。
对于长度为k的回文子序列,可以分类讨论。
长度为1的回文子序列就是序列中的每个元素本身,数量为序列长度。
长度为2的回文子序列需要满足两个元素相同,数量为每个元素出现次数的平方和。
长度为3的回文子序列需要满足首尾元素相同,并且中间元素可以是任意元素,数量为每个元素出现次数的立方和。
def count_palindromic_subsequence(s):
counts = {}
for c in s:
if c in counts:
counts[c] += 1
else:
counts[c] = 1
count_1 = sum(counts.values())
count_2 = sum([v**2 for v in counts.values()])
count_3 = sum([v**3 for v in counts.values()])
return count_1 + count_2 + count_3
此代码中,首先统计了序列中每个元素出现的次数,然后分别计算了长度为1、2、3的回文子序列数量,最后将它们加起来得到总数量。
对于长度超过3的回文子序列,本文不做介绍。