3
string alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";4
unordered_map<char, pair<int, int>> m;5
int distCalc(char a, char b) {6
pair<int, int> p_a = m[a];7
pair<int, int> p_b = m[b];9
int x_diff = abs(p_a.first - p_b.first);10
int y_diff = abs(p_a.second - p_b.second);12
return x_diff + y_diff;15
int minDist(string word, int i, char finger1_char, char finger2_char) {16
if (i == word.size()) return 0;18
if (dp[i][finger1_char - 'A'][finger2_char - 'A'] != -1)19
return dp[i][finger1_char - 'A'][finger2_char - 'A'];22
int op1 = (finger1_char == '[' ? 0 : distCalc(finger1_char, word[i])) +23
minDist(word, i + 1, word[i], finger2_char);26
int op2 = (finger2_char == '[' ? 0 : distCalc(finger2_char, word[i])) +27
minDist(word, i + 1, finger1_char, word[i]);29
return dp[i][finger1_char - 'A'][finger2_char - 'A'] = min(op1, op2);31
int minimumDistance(string word) {32
// each letter has choice to be clicked by finger 1 or 235
for (int i = 0; i < alpha.length(); i++) {38
m[alpha[i]] = {row, col};40
memset(dp, -1, sizeof(dp));41
return minDist(word, 0, '[', '[');