使用 Python 查找最长块回文分解的程序

使用 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”。

要解决此问题,我们将按照以下步骤进行:

  • counter := 0

  • i := 1, j := size of text – 1

  • ic := 0, jc := size of text

  • while i <= j, do

    • if substring of text[from index ic to i-1] is same as substring of text[from index j to jc-1], then
      • counter := counter + 2

      • ic := i

      • jc := j

    • i := i + 1

    • j := j – 1

  • if ic is not same as jc, then

    • counter := counter + 1
  • return counter

示例

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

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教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程