2012-09-14 3 views
1

가능한 중복 :
how to find longest palindromic subsequence?가장 긴 회문의 서브

가장 긴 회문의 서브.
palinadrome은 전진 및 후진을 읽는 알파벳에 비해 비어 있지 않은 문자열입니다. palindromes의 예는 길이 1, 시민, racecar 및 aibohphobia (palindromes의 공포)의 모든 문자열입니다. 주어진 입력 문자열의 하위 시퀀스 인 최장 palindrome을 찾는 효율적인 알고리즘을 제공하십시오. 예를 들어, 입력 "문자"주어진 알고리즘 "caac"반환해야합니다.

이제는 결과의 길이를 얻는 방법을 알고 있습니다. 어떻게 결과의 순서를 얻을 수 있습니까? itertools.combinations() 사용

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)) 
+1

알고리즘은 여기서 설명 하였다 http://stackoverflow.com/questions/4790522/how-to-find-longest-palindromic-subsequence – ernie

+3

이 숙제 여기에서? www.cs.usfca.edu/~galles/cs673/hw7.btreedp.pdf? – ernie

+1

실제로 'carac'은 'caac'보다 길다 – stark

답변

3

이위한

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 
+0

2^n 개의 조합을 모두 확인 중입니다. 가장 효율적인 알고리즘이 아니길 바래요 ... 확실히 가장 효율적인 알고리즘이 아닙니다. – zmbq

+3

나는이 문제를 O (n^2)로 풀기 위해 동적 프로그램을 사용할 수 있다고 생각한다. – xiaoke

관련 문제