Minimum Cost to Convert String II
題目描述:給定兩個等長字串 source 和 target,以及三個陣列 original、changed(字串陣列)、cost,表示可以花費 cost[i] 將子字串 original[i] 替換為等長的 changed[i]。求將 source 轉換為 target 的最小總花費,若不可能則回傳 -1。
解題思路:將所有 original 和 changed 字串插入 Trie 並分配唯一編號,相同字串映射到同一節點。以這些節點為圖的頂點,利用 Dijkstra 求出所有對之間的最短轉換成本。接著用 DP:dp[i] 表示轉換 source[i..] 到 target[i..] 的最小成本。對每個位置 i,若 source[i] == target[i] 則可 dp[i] = dp[i+1];另外在 Trie 中同時走 source[i..] 和 target[i..],找到匹配的子字串對 (u, v),嘗試 dp[i] = dp[i+len] + dist[u][v]。
時間複雜度:O(V² log V + n × L) — V 為不同字串數量,Dijkstra 全源最短路為 O(V(V + E) log V);DP 遍歷字串每個位置,每個位置最多走 L 步(L 為最長 original 字串長度)。
空間複雜度:O(V² + T + n) — 距離矩陣 O(V²),Trie 大小 O(T),DP 陣列 O(n)。
Floyd-Warshall + DP O(V³ + n × L):用 Floyd-Warshall 取代多源 Dijkstra 求全對最短路。V 可能較大(不像 Part I 固定 26),Dijkstra 在稀疏圖上通常更優。
字串雜湊 + DP O(n × L × V):不建 Trie,改用雜湊映射每個子字串到其 ID,再做類似 DP。實作簡單但需處理雜湊碰撞問題。