在 Python 中查找最长分块回文分解长度的程序

假设我们有一个文本。我们必须找到最大可能的 k 使得存在 a[1], a[2], ..., a[k] 使得: 每个 a[i] 都是一个非空字符串。并且它们的串联 a[1] + a[2] + ... + a[k] 等于给定的文本;对于 1 到 k 范围内的所有 i,a[i] = a[{k+1 - i}]。

因此,如果输入类似于 text = "antaprezatepzapreanta",那么输出将是 11,因为我们可以将其拆分为 "a|nt|a|pre|za|tpe|za|pre|a|nt|a"。

示例

让我们看下面的实现来更好地理解

def solve(text):

   counter = 0

   i, j = 1, len(text) - 1

   ic, jc = 0, len(text)

   while i <= j:

      if text[ic:i] == text[j:jc]:

         counter += 2

         ic = i

         jc = j

      i += 1

      j -= 1

   if ic != jc:

      counter += 1

   return counter

text = "antaprezatepzapreanta"

print(solve(text))

输入

[3,4,5,2,1,7,3,4,7], 3
输出结果
11

以上是 在 Python 中查找最长分块回文分解长度的程序 的全部内容, 来源链接: utcz.com/z/357612.html

回到顶部