Skip to content

Commit dc86e00

Browse files
committed
feat: add rust solution to lcci problem: No.01.05
No.01.05.One Away
1 parent e34ca9d commit dc86e00

File tree

3 files changed

+163
-0
lines changed

3 files changed

+163
-0
lines changed

lcci/01.05.One Away/README.md

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,62 @@ func min(x, y, z int) int {
195195
}
196196
```
197197

198+
### **Rust**
199+
200+
```rust
201+
impl Solution {
202+
pub fn one_edit_away(first: String, second: String) -> bool {
203+
let f_len = first.len();
204+
let s_len = second.len();
205+
let first: Vec<char> = first.chars().collect();
206+
let second: Vec<char> = second.chars().collect();
207+
match f_len.max(s_len) - f_len.min(s_len) {
208+
0 => {
209+
let mut diff = false;
210+
for i in 0..f_len {
211+
if first[i] != second[i] {
212+
if diff {
213+
return false;
214+
} else {
215+
diff = true;
216+
}
217+
}
218+
}
219+
true
220+
}
221+
1 => {
222+
let mut diff = false;
223+
let mut i = 0;
224+
let mut j = 0;
225+
while i < f_len && j < s_len {
226+
if first[i] != second[j] {
227+
if diff {
228+
return false;
229+
} else {
230+
diff = true;
231+
if i + 1 != f_len && first[i + 1] == second[j] {
232+
i += 1;
233+
} else if j + 1 != s_len && first[i] == second[j + 1] {
234+
j += 1;
235+
} else {
236+
return false;
237+
}
238+
}
239+
}
240+
i += 1;
241+
j += 1;
242+
}
243+
if diff && (i != f_len || j != s_len) {
244+
return false;
245+
}
246+
true
247+
}
248+
_ => false,
249+
}
250+
}
251+
}
252+
```
253+
198254
### **...**
199255

200256
```

lcci/01.05.One Away/README_EN.md

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,62 @@ func min(x, y, z int) int {
179179
}
180180
```
181181

182+
### **Rust**
183+
184+
```rust
185+
impl Solution {
186+
pub fn one_edit_away(first: String, second: String) -> bool {
187+
let f_len = first.len();
188+
let s_len = second.len();
189+
let first: Vec<char> = first.chars().collect();
190+
let second: Vec<char> = second.chars().collect();
191+
match f_len.max(s_len) - f_len.min(s_len) {
192+
0 => {
193+
let mut diff = false;
194+
for i in 0..f_len {
195+
if first[i] != second[i] {
196+
if diff {
197+
return false;
198+
} else {
199+
diff = true;
200+
}
201+
}
202+
}
203+
true
204+
}
205+
1 => {
206+
let mut diff = false;
207+
let mut i = 0;
208+
let mut j = 0;
209+
while i < f_len && j < s_len {
210+
if first[i] != second[j] {
211+
if diff {
212+
return false;
213+
} else {
214+
diff = true;
215+
if i + 1 != f_len && first[i + 1] == second[j] {
216+
i += 1;
217+
} else if j + 1 != s_len && first[i] == second[j + 1] {
218+
j += 1;
219+
} else {
220+
return false;
221+
}
222+
}
223+
}
224+
i += 1;
225+
j += 1;
226+
}
227+
if diff && (i != f_len || j != s_len) {
228+
return false;
229+
}
230+
true
231+
}
232+
_ => false,
233+
}
234+
}
235+
}
236+
```
237+
182238
### **...**
183239

184240
```

lcci/01.05.One Away/Solution.rs

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
impl Solution {
2+
pub fn one_edit_away(first: String, second: String) -> bool {
3+
let f_len = first.len();
4+
let s_len = second.len();
5+
let first: Vec<char> = first.chars().collect();
6+
let second: Vec<char> = second.chars().collect();
7+
match f_len.max(s_len) - f_len.min(s_len) {
8+
0 => {
9+
let mut diff = false;
10+
for i in 0..f_len {
11+
if first[i] != second[i] {
12+
if diff {
13+
return false;
14+
} else {
15+
diff = true;
16+
}
17+
}
18+
}
19+
true
20+
}
21+
1 => {
22+
let mut diff = false;
23+
let mut i = 0;
24+
let mut j = 0;
25+
while i < f_len && j < s_len {
26+
if first[i] != second[j] {
27+
if diff {
28+
return false;
29+
} else {
30+
diff = true;
31+
if i + 1 != f_len && first[i + 1] == second[j] {
32+
i += 1;
33+
} else if j + 1 != s_len && first[i] == second[j + 1] {
34+
j += 1;
35+
} else {
36+
return false;
37+
}
38+
}
39+
}
40+
i += 1;
41+
j += 1;
42+
}
43+
if diff && (i != f_len || j != s_len) {
44+
return false;
45+
}
46+
true
47+
}
48+
_ => false,
49+
}
50+
}
51+
}

0 commit comments

Comments
 (0)