1.2 KiB
1.2 KiB
//dp[i][j],key的0~i位字符拼写后,ring的第j位对齐12:00方向,需要的最小步数 //前提:key[i] = ring[j],若不满足,dp[i][j] = INT_MAX
这道题目我服! 没做出来
https://blog.csdn.net/qq_41855420/article/details/89058979
class Solution {
public:
int findRotateSteps(string ring, string key) {
//int dp[101][101] = {0};
int n = ring.size();
vector<vector<int>> dp(key.size() + 1, vector<int>(ring.size(), 0));
for (int i = key.size() - 1; i >= 0; i--) {
for (int j = 0; j < ring.size(); j++) {
dp[i][j] = INT_MAX;
for (int k = 0; k < ring.size(); k++) {
if (ring[k] == key[i]) {
int diff = abs(j - k);
int step = min(diff, n - diff);
dp[i][j] = min(dp[i][j], step + dp[i + 1][k]);
}
}
}
}
for (int i = 0; i < dp.size(); i++) {
for (int j = 0; j < dp[0].size(); j++) {
cout << dp[i][j] << " ";
}
cout << endl;
}
return dp[0][0] + key.size();
}
};
2 3 4 5 5 4 3 2 1 0 0 1 2 3