滚动数组优化是动态规划中常见的技巧,特点能降低空间复杂度。时间复杂度不变。
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;
}
}