比较两个字符串的相似度

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());
    }
    
    
}
 

猜你喜欢

转载自my.oschina.net/u/3559788/blog/1820346
今日推荐