From 3ebefae191c2b65e60e992f3387c9974bd8abd7e Mon Sep 17 00:00:00 2001 From: Deven <63876261+devenperez@users.noreply.github.com> Date: Fri, 12 Sep 2025 00:27:20 -0400 Subject: [PATCH] Time: 0 ms (100%), Space: 12.5 MB (51.13%) - LeetHub --- .../0433-minimum-genetic-mutation.py | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 0433-minimum-genetic-mutation/0433-minimum-genetic-mutation.py diff --git a/0433-minimum-genetic-mutation/0433-minimum-genetic-mutation.py b/0433-minimum-genetic-mutation/0433-minimum-genetic-mutation.py new file mode 100644 index 0000000..a897beb --- /dev/null +++ b/0433-minimum-genetic-mutation/0433-minimum-genetic-mutation.py @@ -0,0 +1,39 @@ +class Solution(object): + def minMutation(self, startGene, endGene, bank): + """ + :type startGene: str + :type endGene: str + :type bank: List[str] + :rtype: int + """ + + def isMutation(g1, g2): + numDiff = 0 + for i in range(len(g1)): + if g1[i] != g2[i]: + numDiff += 1 + if numDiff > 1: + return False + return numDiff == 1 + + if endGene not in bank: + return -1 + + queue = [(startGene, 0)] + seen = [False] * len(bank) + + while len(queue) > 0: + currentGene, currentDistance = queue.pop(0) + + for i, gene in enumerate(bank): + if seen[i]: + continue + + if isMutation(currentGene, gene): + if gene == endGene: + return currentDistance + 1 + + queue.append((gene, currentDistance + 1)) + seen[i] = True + + return -1 \ No newline at end of file