Skip to content

Commit 34adbe2

Browse files
authored
feat: add solutions to lc problem: No.2976 (#2150)
No.2976.Minimum Cost to Convert String I
1 parent f170776 commit 34adbe2

File tree

7 files changed

+566
-6
lines changed

7 files changed

+566
-6
lines changed

solution/2900-2999/2976.Minimum Cost to Convert String I/README.md

+190-3
Original file line numberDiff line numberDiff line change
@@ -76,27 +76,214 @@
7676
<!-- 这里可写当前语言的特殊实现逻辑 -->
7777

7878
```python
79-
79+
class Solution:
80+
def minimumCost(
81+
self,
82+
source: str,
83+
target: str,
84+
original: List[str],
85+
changed: List[str],
86+
cost: List[int],
87+
) -> int:
88+
g = [[inf] * 26 for _ in range(26)]
89+
for i in range(26):
90+
g[i][i] = 0
91+
for x, y, z in zip(original, changed, cost):
92+
x = ord(x) - ord('a')
93+
y = ord(y) - ord('a')
94+
g[x][y] = min(g[x][y], z)
95+
for k in range(26):
96+
for i in range(26):
97+
for j in range(26):
98+
g[i][j] = min(g[i][j], g[i][k] + g[k][j])
99+
ans = 0
100+
for a, b in zip(source, target):
101+
if a != b:
102+
x, y = ord(a) - ord('a'), ord(b) - ord('a')
103+
if g[x][y] >= inf:
104+
return -1
105+
ans += g[x][y]
106+
return ans
80107
```
81108

82109
### **Java**
83110

84111
<!-- 这里可写当前语言的特殊实现逻辑 -->
85112

86113
```java
87-
114+
class Solution {
115+
public long minimumCost(
116+
String source, String target, char[] original, char[] changed, int[] cost) {
117+
final int inf = 1 << 29;
118+
int[][] g = new int[26][26];
119+
for (int i = 0; i < 26; ++i) {
120+
Arrays.fill(g[i], inf);
121+
g[i][i] = 0;
122+
}
123+
for (int i = 0; i < original.length; ++i) {
124+
int x = original[i] - 'a';
125+
int y = changed[i] - 'a';
126+
int z = cost[i];
127+
g[x][y] = Math.min(g[x][y], z);
128+
}
129+
for (int k = 0; k < 26; ++k) {
130+
for (int i = 0; i < 26; ++i) {
131+
for (int j = 0; j < 26; ++j) {
132+
g[i][j] = Math.min(g[i][j], g[i][k] + g[k][j]);
133+
}
134+
}
135+
}
136+
long ans = 0;
137+
int n = source.length();
138+
for (int i = 0; i < n; ++i) {
139+
int x = source.charAt(i) - 'a';
140+
int y = target.charAt(i) - 'a';
141+
if (x != y) {
142+
if (g[x][y] >= inf) {
143+
return -1;
144+
}
145+
ans += g[x][y];
146+
}
147+
}
148+
return ans;
149+
}
150+
}
88151
```
89152

90153
### **C++**
91154

92155
```cpp
93-
156+
class Solution {
157+
public:
158+
long long minimumCost(string source, string target, vector<char>& original, vector<char>& changed, vector<int>& cost) {
159+
const int inf = 1 << 29;
160+
int g[26][26];
161+
for (int i = 0; i < 26; ++i) {
162+
fill(begin(g[i]), end(g[i]), inf);
163+
g[i][i] = 0;
164+
}
165+
166+
for (int i = 0; i < original.size(); ++i) {
167+
int x = original[i] - 'a';
168+
int y = changed[i] - 'a';
169+
int z = cost[i];
170+
g[x][y] = min(g[x][y], z);
171+
}
172+
173+
for (int k = 0; k < 26; ++k) {
174+
for (int i = 0; i < 26; ++i) {
175+
for (int j = 0; j < 26; ++j) {
176+
g[i][j] = min(g[i][j], g[i][k] + g[k][j]);
177+
}
178+
}
179+
}
180+
181+
long long ans = 0;
182+
int n = source.length();
183+
for (int i = 0; i < n; ++i) {
184+
int x = source[i] - 'a';
185+
int y = target[i] - 'a';
186+
if (x != y) {
187+
if (g[x][y] >= inf) {
188+
return -1;
189+
}
190+
ans += g[x][y];
191+
}
192+
}
193+
return ans;
194+
}
195+
};
94196
```
95197

96198
### **Go**
97199

98200
```go
201+
func minimumCost(source string, target string, original []byte, changed []byte, cost []int) (ans int64) {
202+
const inf = 1 << 29
203+
g := make([][]int, 26)
204+
for i := range g {
205+
g[i] = make([]int, 26)
206+
for j := range g[i] {
207+
if i == j {
208+
g[i][j] = 0
209+
} else {
210+
g[i][j] = inf
211+
}
212+
}
213+
}
214+
215+
for i := 0; i < len(original); i++ {
216+
x := int(original[i] - 'a')
217+
y := int(changed[i] - 'a')
218+
z := cost[i]
219+
g[x][y] = min(g[x][y], z)
220+
}
221+
222+
for k := 0; k < 26; k++ {
223+
for i := 0; i < 26; i++ {
224+
for j := 0; j < 26; j++ {
225+
g[i][j] = min(g[i][j], g[i][k]+g[k][j])
226+
}
227+
}
228+
}
229+
n := len(source)
230+
for i := 0; i < n; i++ {
231+
x := int(source[i] - 'a')
232+
y := int(target[i] - 'a')
233+
if x != y {
234+
if g[x][y] >= inf {
235+
return -1
236+
}
237+
ans += int64(g[x][y])
238+
}
239+
}
240+
return
241+
}
242+
```
99243

244+
### **TypeScript**
245+
246+
```ts
247+
function minimumCost(
248+
source: string,
249+
target: string,
250+
original: string[],
251+
changed: string[],
252+
cost: number[],
253+
): number {
254+
const g: number[][] = Array.from({ length: 26 }, () => Array(26).fill(Infinity));
255+
for (let i = 0; i < 26; ++i) {
256+
g[i][i] = 0;
257+
}
258+
for (let i = 0; i < original.length; ++i) {
259+
let x: number = original[i].charCodeAt(0) - 'a'.charCodeAt(0);
260+
let y: number = changed[i].charCodeAt(0) - 'a'.charCodeAt(0);
261+
let z: number = cost[i];
262+
g[x][y] = Math.min(g[x][y], z);
263+
}
264+
265+
for (let k = 0; k < 26; ++k) {
266+
for (let i = 0; i < 26; ++i) {
267+
for (let j = 0; j < 26; ++j) {
268+
g[i][j] = Math.min(g[i][j], g[i][k] + g[k][j]);
269+
}
270+
}
271+
}
272+
273+
let ans: number = 0;
274+
let n: number = source.length;
275+
for (let i = 0; i < n; ++i) {
276+
let x: number = source.charCodeAt(i) - 'a'.charCodeAt(0);
277+
let y: number = target.charCodeAt(i) - 'a'.charCodeAt(0);
278+
if (x !== y) {
279+
if (g[x][y] >= Infinity) {
280+
return -1;
281+
}
282+
ans += g[x][y];
283+
}
284+
}
285+
return ans;
286+
}
100287
```
101288

102289
### **...**

0 commit comments

Comments
 (0)