Dervied algorithm from the following website:
        https://www.guyrutenberg.com/2008/12/15/damerau-levenshtein-distance-in-python/
        Gives us the distance between two words.

def damerau_levenshtein_distance(self, s1, s2):
        """ Dervied algorithm from the following website:
        https://www.guyrutenberg.com/2008/12/15/damerau-levenshtein-distance-in-python/
        Gives us the distance between two words.
        """
        d = {}
        lenstr1 = len(s1)
        lenstr2 = len(s2)
        for i in xrange(-1,lenstr1+1):
            d[(i,-1)] = i+1
        for j in xrange(-1,lenstr2+1):
            d[(-1,j)] = j+1
 
        for i in xrange(lenstr1):
            for j in xrange(lenstr2):
                if s1[i] == s2[j]:
                    cost = 0
                else:
                    cost = 1
                d[(i,j)] = min(
                               d[(i-1,j)] + 1, # deletion
                               d[(i,j-1)] + 1, # insertion
                               d[(i-1,j-1)] + cost, # substitution
                              )
                if i and j and s1[i]==s2[j-1] and s1[i-1] == s2[j]:
                    d[(i,j)] = min (d[(i,j)], d[i-2,j-2] + cost) # transposition
 
        return d[lenstr1-1,lenstr2-1]