BFS over genes
Time O(bank × 8 × 4) Space O(bank)Level-order BFS; try 8 positions × 4 letters; keep only bank genes not yet visited.
start = AACCGGTT, end = AAACGGTA, bank = [AACCGGTA, AACCGCTA, AAACGGTA]queue(queue)
steps(vars)
Step 1/4Start with the start gene at 0 steps. It is not the end.
import java.util.*;
class Solution {
public int minMutation(String startGene, String endGene, String[] bank) {
Set<String> valid = new HashSet<>(Arrays.asList(bank));
if (!valid.contains(endGene)) return -1;
Deque<String> q = new ArrayDeque<>(List.of(startGene));
Set<String> seen = new HashSet<>(List.of(startGene));
for (int steps = 0; !q.isEmpty(); steps++) {
for (int size = q.size(); size > 0; size--) {
String g = q.poll();
if (g.equals(endGene)) return steps;
char[] c = g.toCharArray();
for (int i = 0; i < c.length; i++) {
char orig = c[i];
for (char ch : new char[]{'A', 'C', 'G', 'T'}) {
c[i] = ch;
String t = new String(c);
if (valid.contains(t) && seen.add(t)) q.offer(t);
}
c[i] = orig;
}
}
}
return -1;
}
}Verdict: Word Ladder with a tiny alphabet.