diff --git a/solution/0400-0499/0433.Minimum Genetic Mutation/README.md b/solution/0400-0499/0433.Minimum Genetic Mutation/README.md index 84664ab386a65..7e749c1fe32a4 100644 --- a/solution/0400-0499/0433.Minimum Genetic Mutation/README.md +++ b/solution/0400-0499/0433.Minimum Genetic Mutation/README.md @@ -214,31 +214,25 @@ func minMutation(start string, end string, bank []string) int { #### TypeScript ```ts -function minMutation(start: string, end: string, bank: string[]): number { - const queue = [start]; - let res = 0; - while (queue.length !== 0) { - const n = queue.length; - for (let i = 0; i < n; i++) { - const s1 = queue.shift(); - if (s1 === end) { - return res; - } - - for (let j = bank.length - 1; j >= 0; j--) { - const s2 = bank[j]; - let count = 0; - for (let k = 0; k < 8; k++) { - if (s1[k] !== s2[k]) { - count++; - } - } - if (count <= 1) { - queue.push(...bank.splice(j, 1)); +function minMutation(startGene: string, endGene: string, bank: string[]): number { + const q: [string, number][] = [[startGene, 0]]; + const vis = new Set([startGene]); + for (const [gene, depth] of q) { + if (gene === endGene) { + return depth; + } + for (const next of bank) { + let c = 2; + for (let k = 0; k < 8 && c > 0; ++k) { + if (gene[k] !== next[k]) { + --c; } } + if (c && !vis.has(next)) { + q.push([next, depth + 1]); + vis.add(next); + } } - res++; } return -1; } diff --git a/solution/0400-0499/0433.Minimum Genetic Mutation/README_EN.md b/solution/0400-0499/0433.Minimum Genetic Mutation/README_EN.md index cd77bc658210d..b95320f7c57d5 100644 --- a/solution/0400-0499/0433.Minimum Genetic Mutation/README_EN.md +++ b/solution/0400-0499/0433.Minimum Genetic Mutation/README_EN.md @@ -203,31 +203,25 @@ func minMutation(start string, end string, bank []string) int { #### TypeScript ```ts -function minMutation(start: string, end: string, bank: string[]): number { - const queue = [start]; - let res = 0; - while (queue.length !== 0) { - const n = queue.length; - for (let i = 0; i < n; i++) { - const s1 = queue.shift(); - if (s1 === end) { - return res; - } - - for (let j = bank.length - 1; j >= 0; j--) { - const s2 = bank[j]; - let count = 0; - for (let k = 0; k < 8; k++) { - if (s1[k] !== s2[k]) { - count++; - } - } - if (count <= 1) { - queue.push(...bank.splice(j, 1)); +function minMutation(startGene: string, endGene: string, bank: string[]): number { + const q: [string, number][] = [[startGene, 0]]; + const vis = new Set([startGene]); + for (const [gene, depth] of q) { + if (gene === endGene) { + return depth; + } + for (const next of bank) { + let c = 2; + for (let k = 0; k < 8 && c > 0; ++k) { + if (gene[k] !== next[k]) { + --c; } } + if (c && !vis.has(next)) { + q.push([next, depth + 1]); + vis.add(next); + } } - res++; } return -1; } diff --git a/solution/0400-0499/0433.Minimum Genetic Mutation/Solution.ts b/solution/0400-0499/0433.Minimum Genetic Mutation/Solution.ts index d6d8401abba54..06338c771ee60 100644 --- a/solution/0400-0499/0433.Minimum Genetic Mutation/Solution.ts +++ b/solution/0400-0499/0433.Minimum Genetic Mutation/Solution.ts @@ -1,28 +1,22 @@ -function minMutation(start: string, end: string, bank: string[]): number { - const queue = [start]; - let res = 0; - while (queue.length !== 0) { - const n = queue.length; - for (let i = 0; i < n; i++) { - const s1 = queue.shift(); - if (s1 === end) { - return res; - } - - for (let j = bank.length - 1; j >= 0; j--) { - const s2 = bank[j]; - let count = 0; - for (let k = 0; k < 8; k++) { - if (s1[k] !== s2[k]) { - count++; - } - } - if (count <= 1) { - queue.push(...bank.splice(j, 1)); +function minMutation(startGene: string, endGene: string, bank: string[]): number { + const q: [string, number][] = [[startGene, 0]]; + const vis = new Set([startGene]); + for (const [gene, depth] of q) { + if (gene === endGene) { + return depth; + } + for (const next of bank) { + let c = 2; + for (let k = 0; k < 8 && c > 0; ++k) { + if (gene[k] !== next[k]) { + --c; } } + if (c && !vis.has(next)) { + q.push([next, depth + 1]); + vis.add(next); + } } - res++; } return -1; }