求两字符串的距离的算法

莱文斯坦距离(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<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值