Skip to content

Commit 16f2c9d

Browse files
committed
feat: add question 1320
1 parent 9460fef commit 16f2c9d

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed
+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/**
2+
* @param {string} word
3+
* @return {number}
4+
*/
5+
var minimumDistance = function(word) {
6+
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
7+
const map = {};
8+
for (let i = 0; i < chars.length; i++) {
9+
const v = chars.charCodeAt(i) - 65;
10+
map[v] = [Math.floor(v / 6), v % 6];
11+
}
12+
13+
function getDis(a, b) {
14+
const [x1, y1] = map[a];
15+
const [x2, y2] = map[b];
16+
return Math.abs(x1 - x2) + Math.abs(y1 - y2);
17+
}
18+
19+
const dp = [];
20+
let result = Number.MAX_SAFE_INTEGER;
21+
for (let i = 0; i <= word.length; i++) {
22+
dp[i] = new Array(26);
23+
for (let j = 0; j < 26; j++) {
24+
dp[i][j] = new Array(26).fill((i === 0 ? 0 : Number.MAX_SAFE_INTEGER));
25+
}
26+
if (i === 0) {
27+
continue;
28+
}
29+
30+
const v = word.charCodeAt(i - 1) - 65;
31+
for (let l = 0; l < 26; l++) {
32+
for (let r = 0; r < 26; r++) {
33+
if (dp[i - 1][l][r] !== Number.MAX_SAFE_INTEGER) {
34+
dp[i][v][r] = Math.min(dp[i][v][r], dp[i - 1][l][r] + getDis(l, v));
35+
dp[i][l][v] = Math.min(dp[i][l][v], dp[i - 1][l][r] + getDis(v, r));
36+
}
37+
38+
if (i === word.length) {
39+
result = Math.min(result, dp[i][l][v], dp[i][v][r]);
40+
}
41+
}
42+
}
43+
}
44+
45+
return result;
46+
};

0 commit comments

Comments
 (0)