【问题标题】:Longest palindrome subsequence [duplicate]最长回文子序列[重复]
【发布时间】:2012-09-07 23:28:08
【问题描述】:

可能重复:
how to find longest palindromic subsequence?

最长回文子序列。
回文是一些字母表上的非空字符串,向前和向后读取相同。回文的例子是所有长度为 1 的字符串、civic、racecar 和 aibohphobia(对回文的恐惧)。 给出一个有效的算法来找到作为给定输入字符串的子序列的最长回文。例如,给定输入“字符”,您的算法应该返回“caac”。

现在,我知道如何获得结果的长度了。如何获得结果的顺序?

def mylongest(self, i, j):
    if j - i <= 1:
        return j-i
    else:
        if self.sequence[i] == self.sequence[j]:
            return self.mylongest(i+1,j-1) + 2
        else:
            return max (self.mylongest(i+1, j), self.mylongest(i, j-1))

【问题讨论】:

标签: python algorithm


【解决方案1】:

使用itertools.combinations():

In [2]: from itertools import combinations

In [7]: strs="character"

In [8]: for y in range(len(strs)-1,1,-1):
   ...:     for x in combinations(strs,y):
   ...:         if ''.join(x)==''.join(x)[::-1]:
   ...:             print ''.join(x)
   ...:             break
   ...:             
   ...:             
carac
caac
chc
cc

【讨论】:

  • 你正在检查所有 2^n 个组合,我希望它不是最有效的算法...它绝对是效率最低的算法。
  • 我认为我们可以使用动态程序以 O(n^2) 解决这个问题。
猜你喜欢
  • 1970-01-01
  • 2017-02-25
  • 2016-06-03
  • 2012-08-29
  • 2019-06-18
  • 1970-01-01
  • 2022-07-21
  • 1970-01-01
  • 2023-03-13
相关资源
最近更新 更多