知识点:动态规划
这是一个经典的动态规划题目,这道题目的关键是要找到两个字符串中的最长相同子字符串长度,定义dp[i][j]为word1到达i位置,word2到达j位置时,二者相同的子字符串长度值,此时dp[i][j]有两种情况,若i位置与j位置字符相同,则dp[i][j] = dp[i-1][j-1] + 1,表示子字符串长度加一,若两个位置的字符不同,则最长的长度有可能是去掉i字符时的最长长度,也有可能是去掉j字符时的最长长度,即max( dp[i-1][j], dp[i][j-1] ),遍历两个字符串,即可得到整个过程中出现的最长相同子字符串长度,答案即为两个字符串长度与两倍的子字符串长度之差。
Java题解如下
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param word1 string字符串 * @param word2 string字符串 * @return int整型 */ public int minDistance (String word1, String word2) { // write code here int m = word1.length(), n = word2.length(); int[][] dp = new int[m + 1][n + 1]; int max = 0; for(int i = 0; i < m; i++) { for(int j = 0; j < n; j++) { if(word1.charAt(i) == word2.charAt(j)) { dp[i + 1][j + 1] = dp[i][j] + 1; }else { dp[i + 1][j + 1] = Math.max(dp[i][j + 1], dp[i + 1][j]); } max = Math.max(dp[i + 1][j + 1], max); } } return m + n - 2 * max; } }