5
int findRotateSteps(string ring, string key) {6
n = ring.size(), m = key.size();7
for (int i = 0; i < n; i++) pos[ring[i] - 'a'].push_back(i);8
vector<vector<int>> memo(n, vector<int>(m, INT_MAX));9
return helper(0, 0, memo, ring, key);11
int helper(int i, int j, vector<vector<int>> &memo, string &ring, string &key) {13
if (memo[i][j] != INT_MAX) return memo[i][j];15
for (int &next : pos[key[j] - 'a']) {16
int diff = abs(i - next);17
best = min(best, min(diff, n - diff) + helper(next, j + 1, memo, ring, key));19
return memo[i][j] = best + 1;