从 Python 中的子序列中找到最大化回文长度的程序

假设我们有两个字符串,s 和 t。我们想以下列方式制作一个字符串 -

  • 从 s 中选择一些非空子序列 sub1。

  • 从 t 中选择一些非空子序列 sub2。

  • 连接 sub1 和 sub2,以生成字符串。

我们必须找到可以以所描述的方式形成的最长回文的长度。如果我们不能生成任何回文,则返回 0。

因此,如果输入类似于 s = "hillrace" t = "cargame",那么输出将是 7,因为我们可以从 s 中获取“race”,从 r 中获取“car”,所以“racecar”是长度为 7 的回文.

示例

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

def solve(s, t):

   n, m = len(s), len(t)

   word = s + t

   dp = [[0] * (n + m) for _ in range(n + m)]

   for i in range(n + m - 1, -1,-1):

      for j in range(i, n + m):

         if i == j:

            dp[i][j] = 1

         elif word[i] == word[j]:

            dp[i][j] = 2 + dp[i + 1][j - 1]

         else:

            dp[i][j] = max(dp[i + 1][j], dp[i][j - 1])

   ans = 0

   for i in range(n):

      for j in range(m - 1, -1, -1):

         if s[i] == t[j]:

            ans = max(ans, dp[i][n + j])

   return ans

s = "hillrace"

t = "cargame"

print(solve(s, t))

输入

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

以上是 从 Python 中的子序列中找到最大化回文长度的程序 的全部内容, 来源链接: utcz.com/z/355710.html

回到顶部