Re: [闲聊] 每日leetcode

楼主: dont   2024-07-27 10:40:03
2976. Minimum Cost to Convert String I
## 思路
先用original, changed, cost三个array建立Graph
扫source/target字串时对每个字符做dijkstra
## Complexity
source = N
original = M
Time:
Space: O(M+N)
## Code
```python
class Solution:
def minimumCost(self, source: str, target: str, original: List[str],
changed: List[str], cost: List[int]) -> int:
graph = defaultdict(list)
for ori_ch, new_ch, c in zip(original, changed, cost):
graph[ori_ch].append((c, new_ch))
@cache
def get_min_cost(src, dst):
heap = [(0, src)]
seen = {src: 0}
while heap:
curr_cost, ch = heapq.heappop(heap)
if ch == dst:
return curr_cost
for next_cost, next_ch in graph[ch]:
if next_ch not in seen or seen[next_ch] > curr_cost +
next_cost:
seen[next_ch] = curr_cost + next_cost
heapq.heappush(heap, (curr_cost + next_cost, next_ch))
return -1
ans = 0
for src, dst in zip(source, target):
min_cost = get_min_cost(src, dst)
if min_cost == -1:
return -1
ans += min_cost
return ans
```

Links booklink

Contact Us: admin [ a t ] ucptt.com