• 计算字符串的相似度, 华为笔试题


    import java.util.*;
    public class Main {
        static int getDistance(char[] a, int m, char[] b, int n) {
            int[][] f = new int[m+1][n+1];
            for(int i=0; i <= m; i++) f[i][0] = i;
            for(int j=0; j <= n; j++) f[0][j] = j;
            for(int i=1; i <= m; i++) {
                for(int j=1; j <= n; j++) {
                    f[i][j] = f[i-1][j-1];
                    if(a[i-1] != b[j-1]) {
                        f[i][j] ++;
                        f[i][j] = Math.min(f[i][j], f[i-1][j]+1);
                        f[i][j] = Math.min(f[i][j], f[i][j-1]+1);
                    }
                }
            }
            return f[m][n];
        }
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            while(sc.hasNext()) {
                char[] a = sc.next().toCharArray();
                char[] b = sc.next().toCharArray();
                int m = a.length, n = b.length;
                int distance = getDistance(a, m, b, n);
                System.out.println("1/"+(distance+1));
            }
        }
    }
    /*
    f[i][j] 表示串a[0,...,i-1] 和b[0,...,j-1] 的最小编辑距离。
    如果 a[i-1] == b[i-1],
        f[i][j] = f[i-1][j-1]
    如果 a[i-1] != b[i-1],
        f[i][j] = f[i-1][j-1] + 1
    
    如果 a[i-1] != b[i-1],可以删除a中的一个字符
    f[i][j] = f[i-1][j] + 1
    如果 a[i-1] != b[i-1],可以删除b中的一个字符
    f[i][j] = f[i][j-1] + 1
    */
    
  • 相关阅读:
    掌握MySQL 2
    掌握MySQL 1
    掌握并发编程3
    网络编程—SOCKET开发
    掌握并发编程2
    掌握并发编程1
    网络编程知识点
    osi五层协议
    C#中使用正则表达式验证电话号码、手机号、身份证号、数字和邮编
    C#中Convert和parse的区别
  • 原文地址:https://www.cnblogs.com/lixyuan/p/13253863.html
Copyright © 2020-2023  润新知