Skip to content

Commit 9581b48

Browse files
committed
feat: add solutions to lcci problem: No.01.05
No.01.05.One Away
1 parent af39384 commit 9581b48

File tree

4 files changed

+124
-123
lines changed

4 files changed

+124
-123
lines changed

lcci/01.05.One Away/README.md

+43-41
Original file line numberDiff line numberDiff line change
@@ -195,58 +195,60 @@ func min(x, y, z int) int {
195195
}
196196
```
197197

198+
### **TypeScript**
199+
200+
```ts
201+
function oneEditAway(first: string, second: string): boolean {
202+
const n = first.length;
203+
const m = second.length;
204+
205+
let count = 0;
206+
let i = 0;
207+
let j = 0;
208+
while (i < n || j < m) {
209+
if (first[i] !== second[j]) {
210+
count++;
211+
212+
if (i < n && first[i + 1] === second[j]) {
213+
i++;
214+
} else if (j < m && first[i] === second[j + 1]) {
215+
j++;
216+
}
217+
}
218+
i++;
219+
j++;
220+
}
221+
return count <= 1;
222+
}
223+
```
224+
198225
### **Rust**
199226

200227
```rust
201228
impl Solution {
202229
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-
}
230+
let (f_len, s_len) = (first.len(), second.len());
231+
let (first, second) = (first.as_bytes(), second.as_bytes());
232+
let (mut i, mut j) = (0, 0);
233+
let mut count = 0;
234+
while i < f_len && j < s_len {
235+
if first[i] != second[j] {
236+
if count > 0 {
237+
return false;
218238
}
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-
}
239+
240+
count += 1;
241+
if i + 1 < f_len && first[i + 1] == second[j] {
240242
i += 1;
243+
} else if j + 1 < s_len && first[i] == second[j + 1] {
241244
j += 1;
242245
}
243-
if diff && (i != f_len || j != s_len) {
244-
return false;
245-
}
246-
true
247246
}
248-
_ => false,
247+
i += 1;
248+
j += 1;
249249
}
250+
count += f_len - i + s_len - j;
251+
count <= 1
250252
}
251253
}
252254
```

lcci/01.05.One Away/README_EN.md

+43-41
Original file line numberDiff line numberDiff line change
@@ -179,58 +179,60 @@ func min(x, y, z int) int {
179179
}
180180
```
181181

182+
### **TypeScript**
183+
184+
```ts
185+
function oneEditAway(first: string, second: string): boolean {
186+
const n = first.length;
187+
const m = second.length;
188+
189+
let count = 0;
190+
let i = 0;
191+
let j = 0;
192+
while (i < n || j < m) {
193+
if (first[i] !== second[j]) {
194+
count++;
195+
196+
if (i < n && first[i + 1] === second[j]) {
197+
i++;
198+
} else if (j < m && first[i] === second[j + 1]) {
199+
j++;
200+
}
201+
}
202+
i++;
203+
j++;
204+
}
205+
return count <= 1;
206+
}
207+
```
208+
182209
### **Rust**
183210

184211
```rust
185212
impl Solution {
186213
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-
}
214+
let (f_len, s_len) = (first.len(), second.len());
215+
let (first, second) = (first.as_bytes(), second.as_bytes());
216+
let (mut i, mut j) = (0, 0);
217+
let mut count = 0;
218+
while i < f_len && j < s_len {
219+
if first[i] != second[j] {
220+
if count > 0 {
221+
return false;
202222
}
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-
}
223+
224+
count += 1;
225+
if i + 1 < f_len && first[i + 1] == second[j] {
224226
i += 1;
227+
} else if j + 1 < s_len && first[i] == second[j + 1] {
225228
j += 1;
226229
}
227-
if diff && (i != f_len || j != s_len) {
228-
return false;
229-
}
230-
true
231230
}
232-
_ => false,
231+
i += 1;
232+
j += 1;
233233
}
234+
count += f_len - i + s_len - j;
235+
count <= 1
234236
}
235237
}
236238
```

lcci/01.05.One Away/Solution.rs

+16-41
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,26 @@
11
impl Solution {
22
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-
}
3+
let (f_len, s_len) = (first.len(), second.len());
4+
let (first, second) = (first.as_bytes(), second.as_bytes());
5+
let (mut i, mut j) = (0, 0);
6+
let mut count = 0;
7+
while i < f_len && j < s_len {
8+
if first[i] != second[j] {
9+
if count > 0 {
10+
return false;
1811
}
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-
}
12+
13+
count += 1;
14+
if i + 1 < f_len && first[i + 1] == second[j] {
4015
i += 1;
16+
} else if j + 1 < s_len && first[i] == second[j + 1] {
4117
j += 1;
4218
}
43-
if diff && (i != f_len || j != s_len) {
44-
return false;
45-
}
46-
true
4719
}
48-
_ => false,
20+
i += 1;
21+
j += 1;
4922
}
23+
count += f_len - i + s_len - j;
24+
count <= 1
5025
}
5126
}

lcci/01.05.One Away/Solution.ts

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
function oneEditAway(first: string, second: string): boolean {
2+
const n = first.length;
3+
const m = second.length;
4+
5+
let count = 0;
6+
let i = 0;
7+
let j = 0;
8+
while (i < n || j < m) {
9+
if (first[i] !== second[j]) {
10+
count++;
11+
12+
if (i < n && first[i + 1] === second[j]) {
13+
i++;
14+
} else if (j < m && first[i] === second[j + 1]) {
15+
j++;
16+
}
17+
}
18+
i++;
19+
j++;
20+
}
21+
return count <= 1;
22+
}

0 commit comments

Comments
 (0)