[ create a new paste ] login | about

Link: http://codepad.org/zrwE4Xui    [ raw code | output | fork ]

k4st - Python, pasted on Apr 13:
def longest_common_subsequence(A, B):
    """Determine how long the longest common subsequence of A and B are, then
       reconstruct it."""
    
    # create a matrix that will hold the values of a and b
    range_a = range(0, len(A)+1)
    range_b = range(0, len(B)+1)
    matrix = [[0 for j in range_a] for i in range_b]
    
    # go through each character in B
    for i in range(1, len(B)+1):
        
        # go through the characters in A for each character in B
        for j in range(1, len(A)+1):
            
            # compare the current character of B to that of A
            if B[i-1] is A[j-1]:
                matrix[i][j] = matrix[i][j-1]+1
            else:
                matrix[i][j] = max(matrix[i-1][j], matrix[i][j-1])
    
    print "Length of subsequence:", matrix[i][j]
    
    # reconstruct the subsequence from the end to the beginning
    sub_sequence = ""
    while i > 0 and j > 0:  
                
        # we've found a matching character, add it to the subsequence
        if B[i-1] is A[j-1]:
            sub_sequence = A[j-1] + sub_sequence
            i = i-1
            j = j-1
        
        # we haven't found one, either move left or up, depending on the
        # larger value
        else:
            # move up
            if matrix[i-1][j] > matrix[i][j-1]:
                i = i-1
            
            # move left, also the default when (i-1,j)==(i,j-1)
            else:
                j = j-1
    
    print "The subsequence is:", sub_sequence

longest_common_subsequence("gattaca", "atrtic")


Output:
1
2
Length of subsequence: 4
The subsequence is: attc


Create a new paste based on this one


Comments: