题目链接:二指输入的的最小距离
经过几天的冥思苦想,终于想明白了!记录一下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| class Solution { public int minimumDistance(String word) { int n = word.length();
int[][][] dp = new int[n + 1][n + 1][n + 1];
dp[1][0][1] = 0; for (int i = 2; i <= n; i++) {
for (int j = 0; j < i - 1; j++) { dp[i][j][i] = dp[i - 1][j][i - 1] + dis(word.charAt(i - 2), word.charAt(i - 1)); } dp[i][i - 1][i] = dp[i - 1][0][i - 1]; for (int j = 1; j < i - 1; j++) { dp[i][i - 1][i] = Math.min(dp[i][i - 1][i], dp[i - 1][j][i - 1] + dis(word.charAt(j - 1), word.charAt(i - 1))); } }
int ans = Integer.MAX_VALUE; for (int i = 0; i < n; i++) { ans = Math.min(ans, dp[n][i][n]); } return ans; }
int dis(char c1, char c2) { int a = c1 - 'A'; int b = c2 - 'A'; return Math.abs(a / 6 - b / 6) + Math.abs(a % 6 - b % 6); } }
|
结合了这个题解:宝宝也能看懂的 leetcode 题解 - 一维DP数组