Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 3d079dd

Browse files
solves #433: Minimum Genetic Mutation in java
1 parent f16c03f commit 3d079dd

File tree

2 files changed

+67
-0
lines changed

2 files changed

+67
-0
lines changed

‎README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,7 @@
317317
| 422 | 🔒 [Valid Word Square](https://leetcode.com/problems/valid-word-square) | | |
318318
| 429 | 🔒 [N-ary Tree Level Order Traversal](https://leetcode.com/problems/n-ary-tree-level-order-traversal) | [![Java](assets/java.png)](src/NAryTreeLevelOrderTraversal.java) | |
319319
| 430 | [Flatten a Multilevel Doubly Linked List](https://leetcode.com/problems/flatten-a-multilevel-doubly-linked-list) | [![Java](assets/java.png)](src/FlattenAMultiLevelDoublyLinkedList.java) | |
320+
| 433 | [Minimum Genetic Mutation](https://leetcode.com/problems/minimum-genetic-mutation) | [![Java](assets/java.png)](src/MinimumGeneticMutation.java) | |
320321
| 434 | [Number of Segments in a String](https://leetcode.com/problems/number-of-segments-in-a-string) | [![Java](assets/java.png)](src/NumberOfSegmentsInString.java) [![Python](assets/python.png)](python/number_of_segments_in_a_string.py) | |
321322
| 441 | [Arranging Coins](https://leetcode.com/problems/arranging-coins) | [![Java](assets/java.png)](src/ArrangingCoins.java) [![Python](assets/python.png)](python/arranging_coins.py) | |
322323
| 443 | [String Compression](https://leetcode.com/problems/string-compression) | [![Java](assets/java.png)](src/StringCompression.java) [![Python](assets/python.png)](python/string_compression.py) | |

‎src/MinimumGeneticMutation.java

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
// https://leetcode.com/problems/minimum-genetic-mutation
2+
// T: O(B)
3+
// S: O(1)
4+
5+
import java.util.ArrayList;
6+
import java.util.Collections;
7+
import java.util.HashMap;
8+
import java.util.HashSet;
9+
import java.util.LinkedList;
10+
import java.util.List;
11+
import java.util.Map;
12+
import java.util.Queue;
13+
import java.util.Set;
14+
15+
public class MinimumGeneticMutation {
16+
private record Info(String mutation, int steps) {}
17+
18+
private static final char[] GENES = new char[] {'A', 'G', 'C', 'T'};
19+
20+
// n = length of string (8), m = possible number of characters
21+
// BFS, T: O(V + E) = O(nB + n^m * mn) S: O(n^m)
22+
public static int minMutation(String startGene, String endGene, String[] bank) {
23+
final Set<String> genePool = toSet(bank);
24+
if (!genePool.contains(endGene)) {
25+
return -1;
26+
}
27+
28+
final Queue<Info> queue = new LinkedList<>() {{ add(new Info(startGene, 0)); }};
29+
final Map<String, Integer> distances = new HashMap<>();
30+
31+
while (!queue.isEmpty()) {
32+
final Info info = queue.poll();
33+
if (distances.getOrDefault(info.mutation, Integer.MAX_VALUE) <= info.steps) {
34+
continue;
35+
}
36+
distances.put(info.mutation, info.steps);
37+
38+
for (String neighbour : validMutations(genePool, info.mutation)) {
39+
queue.add(new Info(neighbour, info.steps + 1));
40+
}
41+
}
42+
43+
return distances.getOrDefault(endGene, -1);
44+
}
45+
46+
// T: O(|s|), S: O(|s|)
47+
private static List<String> validMutations(Set<String> genePool, String s) {
48+
final List<String> result = new ArrayList<>();
49+
for (int i = 0 ; i < s.length() ; i++) {
50+
for (char c : GENES) {
51+
final String mutation = s.substring(0, i) + c + s.substring(i + 1);
52+
if (genePool.contains(mutation)) {
53+
result.add(mutation);
54+
}
55+
}
56+
}
57+
return result;
58+
}
59+
60+
// T: O(nB) S: O(nB)
61+
private static Set<String> toSet(String[] bank) {
62+
final Set<String> set = new HashSet<>();
63+
Collections.addAll(set, bank);
64+
return set;
65+
}
66+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /