计算字符串的相似度

来源:互联网 发布:淘宝运营工作计划 编辑:程序博客网 时间:2024/05/16 17:34


计算字符串的相似度 

许多程序会大量使用字符串。对于不同的字符串,我们希望能够有办法判断其相似
程度。 我们定义了一套操作方法来把两个不相同的字符串变得相同, 具体的操作方法为:  
1. 修改一个字符  (如  把“a”替换为“b”)。 
2. 增加一个字符  (如把“abdd”变为“aebdd”)。 
3. 删除一个字符(如把“travelling”变为“traveling”)。 
比如, 对于“abcdefg”和“abcdef”两个字符串来说, 我们认为可以通过增加/减少一个“g”
的方式来达到目的。上面的两种方案,都仅需要一次操作。把这个操作所需要的次数定
义为两个字符串的距离,而相似度等于“距离+1”的倒数。也就是说,“abcdefg”和“abcdef”
的距离为 1,相似度为 1 / 2 = 0.5。 

给定任意两个字符串,你是否能写出一个算法来计算出它们的相似度呢? 

//代码来自:编程之美Int  CalculateStringDistance(string  strA,  int  pABegin,  int  pAEnd,  string  strB, int pBBegin, int pBEnd) {  if(pABegin > pAEnd)  {   if(pBBegin > pBEnd)    return 0;    else    return pBEnd – pBBegin + 1;  }   if(pBBegin > pBEnd)  {   if(pABegin > pAEnd)    return 0;   else    return pAEnd – pABegin + 1;  }   if(strA[pABegin] == strB[pBBegin])  {   return CalculateStringDistance(strA, pABegin + 1, pAEnd, strB,  pBBegin + 1, pBEnd);  }  else  {   int t1 = CalculateStringDistance(strA, pABegin + 1, pAEnd, strB,  pBBegin + 2, pBEnd);   int t2 = CalculateStringDistance(strA, pABegin + 2, pAEnd, strB,  pBBegin + 1, pBEnd);   int t3 = CalculateStringDistance(strA, pABegin + 2, pAEnd, strB,  pBBegin + 2, pBEnd);   return minValue(t1,t2,t3) + 1;  } }




原创粉丝点击