Leet Code Daily 2024-04-27 - Freedom Trail
Solution
First, let's say:
DP
If we define:
Obviously,
And the answer should be .
Code
constexpr int kMaxSteps = 100 * 101;
class Solution {
public:
int findRotateSteps(string ring, string key) {
const int m = ring.size(), n = key.size();
auto f = [&](int i, int j) {
const int d = std::abs(i - j);
return std::min(d, m - d);
};
int g[100][100];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
g[i][j] = kMaxSteps;
if (key[i] != ring[j]) {
continue;
}
if (i == 0) {
g[i][j] = 1 + f(0, j);
} else {
for (int k = 0; k < m; k++) {
g[i][j] = std::min(g[i][j], 1 + f(j, k) + g[i - 1][k]);
}
}
}
}
int ans = kMaxSteps;
for (int i = 0; i < m; i++) {
ans = std::min(ans, g[n - 1][i]);
}
return ans;
}
};