最长的回文序列。
palinadrome是一些字母表上的非空字符串,它向前和向后读取相同的字符串。回文的例子是长度为1的所有串,市民,赛车和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))
答案 0 :(得分:3)
使用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