Skip to content

Commit 52e862d

Browse files
authored
Create 2976. Minimum Cost to Convert String I (#539)
2 parents dc5cbd6 + 1f0f60b commit 52e862d

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
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

Comments
 (0)