2976 - Minimum Cost to Convert String I
JAVA
class Solution { public long minimumCost( String source, String target, char[] original, char[] changed, int[] cost) { final int inf = 1 << 29; int[][] g = new int[26][26]; for (int i = 0; i < 26; ++i) { Arrays.fill(g[i], inf); g[i][i] = 0; } for (int i = 0; i < original.length; ++i) { int x = original[i] - 'a'; int y = changed[i] - 'a'; int z = cost[i]; g[x][y] = Math.min(g[x][y], z); } for (int k = 0; k < 26; ++k) { for (int i = 0; i < 26; ++i) { for (int j = 0; j < 26; ++j) { g[i][j] = Math.min(g[i][j], g[i][k] + g[k][j]); } } } long ans = 0; int n = source.length(); for (int i = 0; i < n; ++i) { int x = source.charAt(i) - 'a'; int y = target.charAt(i) - 'a'; if (x != y) { if (g[x][y] >= inf) { return -1; } ans += g[x][y]; } } return ans; } }
C++
class Solution { public: long long minimumCost(string source, string target, vector<char>& original, vector<char>& changed, vector<int>& cost) { const int inf = 1 << 29; int g[26][26]; for (int i = 0; i < 26; ++i) { fill(begin(g[i]), end(g[i]), inf); g[i][i] = 0; } for (int i = 0; i < original.size(); ++i) { int x = original[i] - 'a'; int y = changed[i] - 'a'; int z = cost[i]; g[x][y] = min(g[x][y], z); } for (int k = 0; k < 26; ++k) { for (int i = 0; i < 26; ++i) { for (int j = 0; j < 26; ++j) { g[i][j] = min(g[i][j], g[i][k] + g[k][j]); } } } long long ans = 0; int n = source.length(); for (int i = 0; i < n; ++i) { int x = source[i] - 'a'; int y = target[i] - 'a'; if (x != y) { if (g[x][y] >= inf) { return -1; } ans += g[x][y]; } } return ans; } };
Comments
Post a Comment