zoukankan      html  css  js  c++  java
  • 计算字符串的相似度

    #include<iostream>
    #include<string>
    using namespace std;
    
    /*
    计算A[1,...,lenA]和B[1,...,lenB]的相似度可以采用动态规划计算A[2,...,lenA]和B[1,...,lenB]的相似度,
    A[1,...,lenA]和B[2,...,lenB]的相似度,A[2,...,lenA]和B[2,...,lenB]的相似度,然后取这三个相似度值最大的即为
    A[1,...,lenA]和B[1,...,lenB]的相似度。
    */
    int minValue(int t1,int t2,int t3)
    {
     int temp=(t1<t2)?t1:t2;
     temp=(t3<temp)?t3:temp;
     return temp;
    }
    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,pBEnd);
         int t2=CalculateStringDistance(strA,pABegin,pAEnd,strB,pBBegin+1,pBEnd);;
         int t3=CalculateStringDistance(strA,pABegin+1,pAEnd,strB,pBBegin+1,pBEnd);
         return minValue(t1,t2,t3)+1;
       }
    }
    int main()
    {
         string strA,strB;
      while(true)
      {
           cin>>strA>>strB;
        int lenA=strA.length();
        int lenB=strB.length();
              double similar=CalculateStringDistance(strA,0,lenA-1,strB,0,lenB-1);
        similar=1/(similar+1);
        cout<<similar<<endl;
      }
      system("pause");
      return 0;
    }
    

      

  • 相关阅读:
    15 鼠标事件
    09 属性操作
    06 DOM操作之插入节点
    03 如何处理多个库$冲突的问题
    01 jquery引入
    08 千千音乐盒实现全选和反选
    03 衣服相册切换效果
    02 显示和隐藏图片
    01 图片切换
    派生
  • 原文地址:https://www.cnblogs.com/yanglf/p/2773777.html
Copyright © 2011-2022 走看看