比較兩個字符串的相似度

package com.mytest.testcallable;

public class Test {
    public static void main(String[] args) {
        String i= "養老院";
        String j = "敬老院";
        System.out.println(getFamiliar(i, j));
//        System.out.println(getMinest(1, 2, 3));


    }


    public static int familiar(String str1,String str2){

        int str1Length = str1.length();
        int str2Length = str2.length();
        char s1;
        char s2;
        int cycleNum1;
        int cycleNum2;
        int temp;
        int [][] array;
        if(str1Length==0){
            return str2Length;
        }

        if(str2Length==0){
            return str1Length;
        }

        array = new int[str1Length+1][str2Length+1];

        for(cycleNum1=0;cycleNum1<=str1Length;cycleNum1++){
            array[cycleNum1][0] = cycleNum1;
        }

        for(cycleNum2=0;cycleNum2<=str2Length;cycleNum2++){
            array[0][cycleNum2] = cycleNum2;
        }
            for(cycleNum1=1;cycleNum1<=str1Length;cycleNum1++){
                s1 = str1.charAt(cycleNum1-1);
                for(cycleNum2=1;cycleNum2<=str2Length;cycleNum2++){
                    s2 = str2.charAt(cycleNum2-1);
                    if(s1==s2){
                        temp=0;
                    }else{
                        temp=1;
                    }

                    array[cycleNum1][cycleNum2]  = getMinest(array[cycleNum1][cycleNum2-1]+1, array[cycleNum1-1][cycleNum2]+1, array[cycleNum1-1][cycleNum2-1]+temp);
                }
            
        }
        return array[str1Length][str2Length];
    }

    public static int getMinest(int one,int two,int three){
        return (one = one< two? one:two)<three ?one:three;
    }
    
    public static float getFamiliar(String str1,String str2){
        return  1-(float)familiar(str1,str2)/Math.max(str1.length(), str2.length());
    }
    
    
}
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章