编辑距离的动态规划算法(滚动数组优化)

滚动数组优化是动态规划中常见的技巧,特点能降低空间复杂度。时间复杂度不变。

package demo10;
import java.util.Scanner;
public class test1 {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		String A = input.next();
		char[] A1 = A.toCharArray();
		String B = input.next();
		char[] B1 = B.toCharArray();
		int[] C_OLD = new int[B.length()+1];//储存表格的第i-1行 表格在另一个未优化博客上
		int[] C_NEW = new int[B.length()+1];//储存表格的第i行
		
		for (int i = 0; i <= B.length(); i++)
			C_OLD[i] = i;
		for (int i = 1; i <= A.length(); i++)
		{
			C_NEW[0] = i;
			for (int j = 1; j <= B.length(); j++) //此for循环在填写第i行的数据
			{
				if (A1[i-1] == B1[j-1])
					C_NEW[j] = C_OLD[j-1];
				else
					C_NEW[j] = min(C_NEW[j-1], C_OLD[j], C_OLD[j-1]) + 1;
					
			}
			C_OLD = C_NEW.clone(); //将第i行的数据给OLD 然后继续填写NEW的数据
			
		}
		System.out.println(C_NEW[B.length()]);
	}

	private static int min(int a, int b, int c) {
		if (a < b)
			b = a;
		if (c < b)
			b = c;
		return b;
	}

	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值