最短编辑距离实现字符串相似度匹配

代码如下:

public class SimilarityUtil {
public static SimilarityUtil mInstance ;

public static SimilarityUtil getmInstance() {
    if(mInstance == null) {
        synchronized (SimilarityUtil.class) {
            if (mInstance == null) {
                mInstance = new SimilarityUtil();
            }
        }
    }
    return mInstance;
}

public int LowerOfThree(int first, int second, int third) {

    int min = first;
    if(second < min) {
        min = second;
    }

    if(second < min) {
        min = third;
    }

    return min;
}

public int Compare_Distance(String str1, String str2) {
    int [] [] martix ;
    int a = str1.length();
    int b = str2.length();
    if(a == 0) {return a;}
    if(b == 0) {return b;}
    martix = new int [a+1] [b+1];

    int temp = 0;
    char ch1;
    char ch2;
    int i = 0;
    int j = 0;

    //初始化二维矩阵边界值
    for(i = 0; i<=a; i++){
        martix[i][0] = i;
    }

    for(j = 0; j<=b; j++) {
        martix[0][j] = j;
    }

    char[] char1 = str1.toCharArray();
    char[] char2 = str2.toCharArray();
    for(i = 1 ; i <=a; i++){
        for(j = 1; j<=b; j++) {
            ch2 = char2[j-1];
            ch1 = char1[i-1];
            if(ch1 == ch2) {
                martix[i][j] = martix[i-1][j-1];
            } else {
                martix[i][j] = LowerOfThree(martix[i-1][j],
                        martix[i-1][j-1],martix[i][j-1] )+1;
            }

        }
    }
    return martix[a][b];
}

}

大概思路:利用二维矩阵,矩阵行列长度分别为两个字符串长度加1,初始化第一行和第一列都为1,记录两个字符串是否相等,想等,就取左上角的值,不相等,就取左,上,左上中的最小值加1,依次到最后,最后一位便是“相似度”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值