|
| 1 | +class Solution { |
| 2 | + unordered_map<char, unordered_map<char, long long>> memo; |
| 3 | +private: |
| 4 | + long long dijkstra(char src, char tar, unordered_map<char, vector<pair<char, long long>>> &mp) |
| 5 | + { |
| 6 | + if (memo[src].find(tar) != memo[src].end()) return memo[src][tar]; |
| 7 | + |
| 8 | + priority_queue<pair<long long, char>, vector<pair<long long, char>>, greater<pair<long long, char>>> pq; |
| 9 | + unordered_map<char, long long>distance; |
| 10 | + |
| 11 | + pq.push({0, src}); |
| 12 | + distance[src] = 1; |
| 13 | + |
| 14 | + while(!pq.empty()) |
| 15 | + { |
| 16 | + long long topCost = pq.top().first; |
| 17 | + char topChar = pq.top().second; |
| 18 | + pq.pop(); |
| 19 | + |
| 20 | + if (topChar == tar) |
| 21 | + { |
| 22 | + memo[src][tar] = topCost; |
| 23 | + return topCost; |
| 24 | + } |
| 25 | + |
| 26 | + for (auto x:mp[topChar]) |
| 27 | + { |
| 28 | + char mpChar = x.first; |
| 29 | + long long mpCost = x.second; |
| 30 | + |
| 31 | + if (distance.find(mpChar) == distance.end() or topCost + mpCost < distance[mpChar]) |
| 32 | + { |
| 33 | + distance[mpChar] = topCost + mpCost; |
| 34 | + pq.push({distance[mpChar], mpChar}); |
| 35 | + } |
| 36 | + } |
| 37 | + |
| 38 | + } |
| 39 | + |
| 40 | + memo[src][tar] = 0; |
| 41 | + return -1; |
| 42 | + } |
| 43 | + |
| 44 | +public: |
| 45 | + long long minimumCost(string source, string target, vector<char>& original, vector<char>& changed, vector<int>& cost) |
| 46 | + { |
| 47 | + unordered_map<char, vector<pair<char, long long>>>mp; |
| 48 | + for (int i = 0; i < original.size(); ++i) |
| 49 | + { |
| 50 | + mp[original[i]].push_back({changed[i], cost[i]}); |
| 51 | + } |
| 52 | + |
| 53 | + long long ans = 0; |
| 54 | + for (int i = 0; i < source.size(); ++i) |
| 55 | + { |
| 56 | + if (source[i] != target[i]) |
| 57 | + { |
| 58 | + long long Cost = dijkstra(source[i], target[i], mp); |
| 59 | + if (Cost == -1) return -1; |
| 60 | + ans += Cost; |
| 61 | + } |
| 62 | + } |
| 63 | + |
| 64 | + return ans; |
| 65 | + } |
| 66 | +}; |
0 commit comments