zoukankan      html  css  js  c++  java
  • 求两个字符串的编辑距离

    https://www.jianshu.com/p/a617d20162cf

    代码:

    float ldistance(const std::string source, const std::string target)
    {
        int distance = 0;
        float similarity = 0.0;
        int srcLen = source.length();
        int tgtLen = target.length();
    
        //step 1
        if (0 == tgtLen || 0 == srcLen)
            return 0;
        //Construct a matrix
        typedef std::vector<std::vector<int> > Tmatrix;
        Tmatrix matrix(srcLen + 1);
        for (int i = 0; i <= srcLen; ++i)
            matrix[i].resize(tgtLen + 1);
    
        //step 2 Initialize
        for (int i = 1; i <= srcLen; ++i)
            matrix[i][0] = i;
        for (int i = 1; i <= tgtLen; ++i)
            matrix[0][i] = i;
    
        //step 3
        for (int i = 1; i <= srcLen; ++i) {
            const char si = source[i - 1];
            //step 4
            for (int j = 1; j <= tgtLen; ++j) {
                const char dj = target[j - 1];
                //step 5
                int cost;
                if (si == dj) {
                    cost = 0;
                } else {
                    cost = 1;
                }
                //step 6
                const int above = matrix[i - 1][j] + 1;
                const int left = matrix[i][j - 1] + 1;
                const int diag = matrix[i - 1][j - 1] + cost;
    
                int min = left > diag ? diag : left;
                min = min > above ? above : min;
    
                matrix[i][j] = min;
    
            }
        }//step7
    
        distance = matrix[srcLen][tgtLen];
        similarity = 1 - (float) distance / std::max(srcLen, tgtLen);
        return similarity;
    }
  • 相关阅读:
    log4j
    JDBCtemplete 模板
    动态代理 aop切面实现事务管理
    spring
    spring mvc 简单实现及相关配置实现
    ssm整合
    Jquery
    Git分布式版本控制系统
    Java web server 基本实现原理
    jvm
  • 原文地址:https://www.cnblogs.com/rainsoul/p/11077183.html
Copyright © 2011-2022 走看看