127. 단어 연결 (JS 구현)

11640 단어 검지 제공
1 문제
두 단어 (begin Word 와 endWord) 와 사전 을 지정 하여 begin Word 에서 endWord 로 의 최 단 변환 시퀀스 의 길 이 를 찾 습 니 다.변환 은 다음 과 같은 규칙 을 따라 야 합 니 다. 매번 변환 할 때마다 한 글자 만 바 꿀 수 있 습 니 다.전환 과정 에서 중간 단 어 는 사전 의 단어 여야 합 니 다.설명: 이러한 변환 시퀀스 가 존재 하지 않 으 면 0 으로 돌아 갑 니 다.모든 단 어 는 같은 길 이 를 가지 고 있다.모든 단 어 는 소문 자로 만 이 루어 져 있다.사전 에는 중복 되 는 단어 가 존재 하지 않 습 니 다.begin Word 와 endWord 가 비어 있 지 않 고 다르다 고 가정 할 수 있 습 니 다.예제 1: 입력: beginWord = "hit", endWord = "cog", wordList = ["hot", "dot", "dog", "lot", "log", "cog"] 출력: 5 설명: 가장 짧 은 변환 순 서 는 "hit" - > "hot" - > "dot" - > "dog" - > "dog" - > "cog" 입 니 다. 길이 5 를 되 돌려 줍 니 다.예제 2: 입력: beginWord = "hit" endWord = "cog" wordList = ["hot", "dot", "dog", "lot", "log"] 출력: 0 설명: endWord "cog" 는 사전 에 없 기 때문에 변환 할 수 없습니다.
사고
이 문 제 는 그림 의 역 사 를 고찰 하기 시작 했다. 먼저 그림 구 조 를 구축 하고 같은 자 모 를 가 진 단 어 를 연결 하여 allWords, key 는 여러 가지 형식 이다. 예 를 들 어 *ot, value 은 이 형식 을 가 진 단어 목록 이다. 예 를 들 어 hot、dot、lot 이렇게 하면 지 정 된 형식의 단 어 를 신속하게 얻 을 수 있다. 그 다음 에 beginWord 부터 전체 그림 을 광범 위 하 게 옮 겨 다 니 며 찾 을 때endWord 시 전환 경 로 를 얻 었 음 을 나타 낸다.
3 코드
/**
 * @param {string} beginWord
 * @param {string} endWord
 * @param {string[]} wordList
 * @return {number}
 */
var ladderLength = function(beginWord, endWord, wordList) {
    if (!wordList.includes(endWord)) return 0;

    let len = beginWord.length;
    const allWords = {};

    for (let word of wordList) {    //      ,   
        for (let i=1; i<=len; i++) {
            let key = `${word.slice(0,i-1)}*${word.slice(i,len)}`;
            if (!allWords[key])  allWords[key] = [];
            allWords[key].push(word);
        }
    }

    const quque = [{word: beginWord, index: 1}];   //index         
    const visited = {};

    while(quque.length > 0) {    //         
        let item = quque.shift();
        for (let i=1; i<=len; i++) {
            let key = `${item.word.slice(0,i-1)}*${item.word.slice(i,len)}`;
            if (!allWords[key]) continue;
            for (let j=0; j<allWords[key].length; j++) {
                let word = allWords[key][j]
                if (word === endWord) return item.index + 1;
                if (visited[word]) continue;
                quque.push({word, index: item.index + 1});
                visited[word] = true;
            }
        }
    }

    return 0;
};

좋은 웹페이지 즐겨찾기