zoukankan      html  css  js  c++  java
  • 编程之美---计算字符串的相似度

    对于不同的字符串,判断其相似程度。可以修改一个字符,增加一个字符,删除一个字符等操作。

    分析:当两个字符串第一个字符相等时,直接把两个字符串跳到第二个位置开始比较就可以了。当两个字符串第一个字符不相等时,不管怎么操作总是,要么第一个串跳到第二个位置,第二个串位置不变;或者第一个串位置不变,第二个跳到第二个位置;或者两个串都跳到第二个位置(同过修改串的字符)。于是就可以写个递归程序处理。

     1 int calculateStringDistance(string strA, int pABegin, int pAEnd, string strB, int pBBegin, int pBEnd)
     2  {
     3      if(pABegin > pAEnd)
     4      {
     5          if(pBBegin > pBEnd)
     6              return 0;
     7          else
     8              return pBEnd - pBBegin + 1;
     9      }
    10 
    11      if(pBBegin > pBEnd)
    12      {
    13          if(pABegin > pAEnd)
    14              return 0;
    15          else
    16              return pAEnd - pABegin + 1;
    17      }
    18 
    19      if(strA[pABegin] == strB[pBBegin])
    20      {
    21          return calculateStringDistance(strA, pABegin+1, pAEnd, strB, pBBegin+1, pBEnd);
    22      }
    23      else
    24      {
    25          int t1 = calculateStringDistance(strA, pABegin, pAEnd, strB, pBBegin+1, pBEnd);
    26          int t2 = calculateStringDistance(strA, pABegin+1, pAEnd, strB, pBBegin, pBEnd);
    27          int t3 = calculateStringDistance(strA, pABegin+1, pAEnd, strB, pBBegin+1, pBEnd);
    28          return minValue(t1, t2, t3) + 1;
    29      }
    30  }
    View Code

    因为递归时,有些子问题重复了,所以可以增加一个数组来记录计算出的每一个值,每次调用时,直接查找有木有这个值,有就直接用,不要再计算了。

  • 相关阅读:
    利用xslt合并多个xml文件到一个文件
    如果利用网络推广老家的特产水果?
    C#并行编程中的Parallel.Invoke
    Asp.Net MVC实现优酷(youku)Web的上传
    修改用户名后TSF出现"需要本地工作区。工作区 xxx 并未驻留在本计算机上"
    JS浏览器滚轮事件实现横向滚动照片展
    Android实现dialog时候弹出软键盘dialog移位问题
    快速搭建多线程Windows服务解决方案
    Difference between WCF and Web API and WCF REST and Web Service
    WPF应用程序的性能提升(一)
  • 原文地址:https://www.cnblogs.com/wen-ge/p/4154039.html
Copyright © 2011-2022 走看看