萊文斯坦距離(LD)用于衡量兩個字串之間的相似性。 以下我們稱這兩個字串分別為 s (原字串) 和 t (目標字串)。萊文斯坦距離被定義為''將字串 s 變換為字串 t 所需的刪除、插入、替換操作的次數''。 例如: s="test", t="test", 那麼 LD(s,t)=0,因為不需要做任何變換兩者已相等; s="test", t="tent", 那麼 LD(s,t)=1,因為s變換為t只需做一次替換(將"s"替換為"n")。萊文斯坦距離越大,字串的相似程度越低。 inline int min_in_three ( int i, int j, int k ) { int ret = min( i, j); return min(ret, k); } // compare two char, if the same, return 0, else 1 int diff (char *left, char *right) { return (*left)==(*right)?0:1; } int CalcDistance ( char *left, char * right, int n_left, int n_right ) { if ( n_left == 0) { return n_right; } if ( n_right == 0) { return n_left; } return min_in_three( 1 + CalcDistance( left, right, n_left-1, n_right), 1 + CalcDistance( left, right, n_left, n_right-1), diff( left+n_left, right+n_right) + CalcDistance( left, right, n_left-1, n_right-1)); } int main() { char *p = "snowy"; char *q = "sunny"; int l_p = strlen(p); int l_q = strlen(q); int i_distance = CalcDistance(p, q, l_p, l_q); cout<