433 bfs
This commit is contained in:
parent
9a925bccbb
commit
75690d88f7
38
433-240602-pass/main.py
Normal file
38
433-240602-pass/main.py
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
class Solution:
|
||||||
|
def minMutation(self, startGene: str, endGene: str, bank: list[str]) -> int:
|
||||||
|
if endGene not in bank: return -1
|
||||||
|
que = []
|
||||||
|
front = -1
|
||||||
|
tail = -1
|
||||||
|
def push_back(que, front, tail, ele):
|
||||||
|
tail += 1
|
||||||
|
if tail >= len(que):
|
||||||
|
que.append(ele)
|
||||||
|
else:
|
||||||
|
que[tail] = ele
|
||||||
|
return tail
|
||||||
|
def pop(que, front ,tail):
|
||||||
|
front += 1
|
||||||
|
return (front , que[front])
|
||||||
|
tail = push_back(que,front,tail,(startGene,0))
|
||||||
|
def diff(str1, str2) -> int:
|
||||||
|
rlt = 0
|
||||||
|
for idx, ch in enumerate(str1):
|
||||||
|
if(str1[idx] != str2[idx]): rlt += 1
|
||||||
|
return rlt
|
||||||
|
rlt = 1e5
|
||||||
|
while front != tail:
|
||||||
|
(front, top_ele) = pop(que, front, tail)
|
||||||
|
step = top_ele[1]
|
||||||
|
string = top_ele[0]
|
||||||
|
if diff(string, endGene) == 0: return step
|
||||||
|
for s in bank:
|
||||||
|
diff_num = diff(s, string)
|
||||||
|
# print(diff_num)
|
||||||
|
if diff_num == 1:
|
||||||
|
tail = push_back(que, front, tail, (s, step + 1))
|
||||||
|
return -1
|
||||||
|
|
||||||
|
sol = Solution()
|
||||||
|
print(sol.minMutation("AACCGGTT","AACCGGTA",["AACCGGTA"]))
|
||||||
|
print(sol.minMutation("AACCGGTT","AAACGGTA",["AACCGGTA","AACCGCTA","AAACGGTA"]))
|
Loading…
Reference in New Issue
Block a user