Scribbling

LeetCode: 127. Word Ladder 본문

Computer Science/Coding Test

LeetCode: 127. Word Ladder

focalpoint 2021. 11. 7. 21:03

아래 문제와 거의 같다.

https://focalpoint.tistory.com/101

 

LeetCode: 126. Word Ladder II - 시바견의 끄적임

개인적으로 어려웠던 문제... A. 내가 푼 방법 일단 내가 푼 방법은 아래와 같다. 1) 모든 word에 대해 graph를 그린다. (word간 글자가 1개만 차이나는 경우 연결) 2) 다익스트라 알고리즘으로 최단 경

focalpoint.tistory.com

class Solution:
    def ladderLength(self, beginWord: str, endWord: str, wordList: List[str]) -> int:
        wordSet = set(wordList)
        wordSet.discard(beginWord)
        if endWord not in wordSet:
            return 0
        
        def neighbor(word):
            for i in range(len(word)):
                for c in 'abcdefghijklmnopqrstuvwxyz':
                    candidate = word[:i] + c + word[i+1:]
                    if candidate in wordSet:
                        yield candidate
        
        q = [[beginWord]]
        while q:
            temp_q = []
            for i in range(len(q)):
                last_word = q[i][-1]
                if last_word == endWord:
                    return len(q[i])
                deletes = []
                for next_word in neighbor(last_word):
                    temp_q.append(q[i]+[next_word])
                    deletes.append(next_word)
                wordSet -= set(deletes)
            q = temp_q
        return 0