gpt4 book ai didi

algorithm - 长度为 4 的回文子序列的个数

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:41:46 24 4
gpt4 key购买 nike

给定一个长度为n的字符串S,只包含小写英文字母,我们要计算长度为4的回文子序列的数量。

回文子序列的总数可以通过O(n^2) DP计算。但是如何以 O(n log n)O(n) 的顺序计算长度为 4 的此类子序列的数量?

示例:“abcdbaadc”的答案为 4。[索引 (1, 2, 5, 6), (1, 2, 5, 7), (3, 6, 7, 9), (4, 6, 7 , 8)]

如有任何提示或解释,我们将不胜感激。

最佳答案

由于长度为 4,您可以枚举 ABBA 形式的长度为 4 的所有可能字符串,并且对于每个字符串,运行标准算法以查找给定字符串中该特定字符串的子序列数。

复杂度:O(n*26*26),n为字符串的长度。下面是用于在另一个字符串中查找特定字符串的子序列数的 python 代码。

def num_subsequences(seq, sub):
m, n = len(seq)+1, len(sub)+1
table = [[0]*n for i in xrange(m)]
def count(iseq, isub):
if not isub:
return 1
elif not iseq:
return 0
return (table[iseq-1][isub] +
(table[iseq-1][isub-1] if seq[m-iseq-1] == sub[n-isub-1] else 0))
for row in xrange(m):
for col in xrange(n):
table[row][col] = count(row, col)
return table[m-1][n-1]

关于algorithm - 长度为 4 的回文子序列的个数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38552528/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com