最小编辑距离代码


public class MinEditorDictance{
	
	protected static final int MAX_NUM=1000;//数组最大长度
	protected static int[][] matrix=new int[MAX_NUM][MAX_NUM];//数组矩阵,matrix[m][n]表示长度为m,长度为n的字符串的最小编辑距离
	
	/**如果数组空间不够重新分配大小**/
	protected static boolean modifyArrays(int[][] array,int m,int n){//m为所需要行的高度,n为所需要列的高度
		if(m<=0||n<=0)return false;//改变
		if(array.length<m || array[0].length<n){
			array=new int[m][n];
		}
		return true;
	}
	/**初始化矩阵**/
	protected static void initMatrix(int[][] array,int len1,int len2){//m为字符串长度
		array[0][0]=0;
		for(int i=1;i<=len1;++i){
			array[i][0]=i;
		}
		for(int i=1;i<=len2;++i){
			array[0][i]=i;
		}
	}
	/**求最小值**/
	protected static int min(int... num){
		int min=Integer.MAX_VALUE;
		for(int i=0;i<num.length;++i){
			if(min>num[i])min=num[i];
		}
		return min;
	}
	/**最小编辑距离**/
	public static int minEdtDic(String str1,String str2){
		if(null==str1 && null==str2)return -1;
		if(null==str1)return str2.length();
		if(null==str2)return str1.length();
		int len1=str1.length(),len2=str2.length();//获取两个字符串长度
		if(!modifyArrays(matrix,len1+1,len2+1))return -1;//检测数组长度,如果小则拓展矩阵,如果参数不合法,返回-1
		initMatrix(matrix,len1,len2);//初始化最小编辑距离矩阵数组
		for(int i=0;i<len1;++i){//遍历字符串1
			for(int j=0;j<len2;++j){//遍历字符串2
				if(str1.charAt(i)==str2.charAt(j)){
					matrix[i+1][j+1]=matrix[i][j];//如果字符相等则字符串1,字符串2回退一个字符的最小编辑距离
				}else{
					matrix[i+1][j+1]=min(matrix[i+1][j],matrix[i][j+1],matrix[i][j])+1;
				}
			}
		}
		return matrix[len1][len2];
	}
	
	/**测试例子**/
	public static void main(String[] args){
		String[] strs=new String[]{"abcdefg","abcddefg","abcd","abc","abcde","aace","a","a"};
		for(int i=0;i<strs.length/2;++i){
			System.out.println(strs[i*2]+"->"+strs[i*2+1]+"="+minEdtDic(strs[i*2], strs[i*2+1]));
		}
	}
	
}

最小编辑距离代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值