题目描述
给定两个字符串 str1 和 str2 ,请你算出将 str1 转为 str2 的最少操作数。
你可以对字符串进行3种操作:
1.插入一个字符
2.删除一个字符
3.修改一个字符。
字符串长度满足 1<=n<=1000 ,保证字符串中只出现小写英文字母。
一、思路引出
要把一个字符串经过一定次数的增删改操作转换成另一个字符串,一般显示考虑从其子串入手,先尝试将字符串1的某个子串转换为字符串2的某个子串,计算其最短转换操作次数,而子串应当还可以继续拆分,这实际上是一种动态规划算法。
二、具体算法
1.算法设计
构造一个二维数组distance[ i ][ j ] 用于记录原字符串0~i 位置的子串转换为目标字符串0~j 位置的子串所需的操作次数,另外对于长度为0的第0个子串,其转换为目标串的任意子串的编辑距离一定等于该目标子串的长度,依此初始化distance距离数组。
int max_len = Math.max(str1.length(),str2.length());
distance = new int[max_len+1][max_len+1];
for(int i=0; i<=str1.length(); i++){
distance[i][0] = i;
}
for(int j=0; j<=str2.length()