Skip to content

Commit 0a5f985

Browse files
authored
feat: add Rust solution for lc No.2976 (#5000)
1 parent ae31a7f commit 0a5f985

3 files changed

Lines changed: 153 additions & 2 deletions

File tree

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

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ tags:
5353
<strong>输入:</strong>source = "aaaa", target = "bbbb", original = ["a","c"], changed = ["c","b"], cost = [1,2]
5454
<strong>输出:</strong>12
5555
<strong>解释:</strong>要将字符 'a' 更改为 'b':
56-
- 将字符 'a' 更改为 'c',成本为 1
57-
- 将字符 'c' 更改为 'b',成本为 2
56+
- 将字符 'a' 更改为 'c',成本为 1
57+
- 将字符 'c' 更改为 'b',成本为 2
5858
产生的总成本是 1 + 2 = 3。
5959
将所有 'a' 更改为 'b',产生的总成本是 3 * 4 = 12 。
6060
</pre>
@@ -310,6 +310,58 @@ function minimumCost(
310310
}
311311
```
312312

313+
#### Rust
314+
315+
```rust
316+
impl Solution {
317+
pub fn minimum_cost(
318+
source: String,
319+
target: String,
320+
original: Vec<char>,
321+
changed: Vec<char>,
322+
cost: Vec<i32>,
323+
) -> i64 {
324+
let inf: i64 = i64::MAX / 4;
325+
let mut g = vec![vec![inf; 26]; 26];
326+
327+
for i in 0..26 {
328+
g[i][i] = 0;
329+
}
330+
331+
for i in 0..original.len() {
332+
let x = (original[i] as u8 - b'a') as usize;
333+
let y = (changed[i] as u8 - b'a') as usize;
334+
g[x][y] = g[x][y].min(cost[i] as i64);
335+
}
336+
337+
for k in 0..26 {
338+
for i in 0..26 {
339+
for j in 0..26 {
340+
let v = g[i][k] + g[k][j];
341+
if v < g[i][j] {
342+
g[i][j] = v;
343+
}
344+
}
345+
}
346+
}
347+
348+
let mut ans: i64 = 0;
349+
for (a, b) in source.bytes().zip(target.bytes()) {
350+
if a != b {
351+
let x = (a - b'a') as usize;
352+
let y = (b - b'a') as usize;
353+
if g[x][y] >= inf {
354+
return -1;
355+
}
356+
ans += g[x][y];
357+
}
358+
}
359+
360+
ans
361+
}
362+
}
363+
```
364+
313365
#### JavaScript
314366

315367
```js

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

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,58 @@ function minimumCost(
302302
}
303303
```
304304

305+
#### Rust
306+
307+
```rust
308+
impl Solution {
309+
pub fn minimum_cost(
310+
source: String,
311+
target: String,
312+
original: Vec<char>,
313+
changed: Vec<char>,
314+
cost: Vec<i32>,
315+
) -> i64 {
316+
let inf: i64 = i64::MAX / 4;
317+
let mut g = vec![vec![inf; 26]; 26];
318+
319+
for i in 0..26 {
320+
g[i][i] = 0;
321+
}
322+
323+
for i in 0..original.len() {
324+
let x = (original[i] as u8 - b'a') as usize;
325+
let y = (changed[i] as u8 - b'a') as usize;
326+
g[x][y] = g[x][y].min(cost[i] as i64);
327+
}
328+
329+
for k in 0..26 {
330+
for i in 0..26 {
331+
for j in 0..26 {
332+
let v = g[i][k] + g[k][j];
333+
if v < g[i][j] {
334+
g[i][j] = v;
335+
}
336+
}
337+
}
338+
}
339+
340+
let mut ans: i64 = 0;
341+
for (a, b) in source.bytes().zip(target.bytes()) {
342+
if a != b {
343+
let x = (a - b'a') as usize;
344+
let y = (b - b'a') as usize;
345+
if g[x][y] >= inf {
346+
return -1;
347+
}
348+
ans += g[x][y];
349+
}
350+
}
351+
352+
ans
353+
}
354+
}
355+
```
356+
305357
#### JavaScript
306358

307359
```js
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
impl Solution {
2+
pub fn minimum_cost(
3+
source: String,
4+
target: String,
5+
original: Vec<char>,
6+
changed: Vec<char>,
7+
cost: Vec<i32>,
8+
) -> i64 {
9+
let inf: i64 = i64::MAX / 4;
10+
let mut g = vec![vec![inf; 26]; 26];
11+
12+
for i in 0..26 {
13+
g[i][i] = 0;
14+
}
15+
16+
for i in 0..original.len() {
17+
let x = (original[i] as u8 - b'a') as usize;
18+
let y = (changed[i] as u8 - b'a') as usize;
19+
g[x][y] = g[x][y].min(cost[i] as i64);
20+
}
21+
22+
for k in 0..26 {
23+
for i in 0..26 {
24+
for j in 0..26 {
25+
let v = g[i][k] + g[k][j];
26+
if v < g[i][j] {
27+
g[i][j] = v;
28+
}
29+
}
30+
}
31+
}
32+
33+
let mut ans: i64 = 0;
34+
for (a, b) in source.bytes().zip(target.bytes()) {
35+
if a != b {
36+
let x = (a - b'a') as usize;
37+
let y = (b - b'a') as usize;
38+
if g[x][y] >= inf {
39+
return -1;
40+
}
41+
ans += g[x][y];
42+
}
43+
}
44+
45+
ans
46+
}
47+
}

0 commit comments

Comments
 (0)