Advertisement
Guest User

Untitled

a guest
Sep 26th, 2020
34
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const getTransformationsByIndex = (word, index, wordList, seenSet) => {
  2.     const leftWordPart = word.slice(0, index);
  3.     const rightWordPart = word.slice(index + 1, word.length);
  4.    
  5.     const needle = leftWordPart + rightWordPart;
  6.    
  7.     return wordList
  8.         .filter(selectedWord => !seenSet.has(selectedWord))
  9.         .filter(selectedWord => {
  10.         const haystack = selectedWord.slice(0, index) + selectedWord.slice(index + 1, word.length);
  11.         return needle === haystack;
  12.     })
  13. }
  14.  
  15. const getAllTransformations =  (word, wordList, seenSet) => {
  16.     const transformations = [];
  17.     for (let i = 0; i < word.length; i++) {
  18.         const transformationsByIndex = getTransformationsByIndex(word, i, wordList, seenSet);
  19.         transformations.push(...transformationsByIndex);
  20.     }
  21.    
  22.     return transformations;
  23. }
  24.  
  25.  
  26. const ladderLength = (beginWord, endWord, wordList) => {
  27.     const seenBeginSet = new Set();
  28.     const seenEndSet = new Set();
  29.    
  30.     const endWordList = [...wordList, beginWord];
  31.    
  32.     const endWordIndex = endWordList.findIndex(word => word === endWord) ;
  33.     endWordList.splice(endWordIndex, 1);
  34.    
  35.     let beginTransformationsCount = 0;
  36.     let endTransformationsCount = 0;
  37.    
  38.     const beginQueue = [beginWord];
  39.     const endQueue = [endWord];
  40.    
  41.     while (beginQueue.length && endQueue.length) {
  42.         const beginQueueLen = beginQueue.length;
  43.         for (let i=0; i < beginQueueLen; i++) {
  44.             const selectedBeginWord = beginQueue.shift();
  45.             if (seenEndSet.has(selectedBeginWord)) {
  46.                return beginTransformationsCount + endTransformationsCount;
  47.             }
  48.            
  49.             seenBeginSet.add(selectedBeginWord);
  50.             const beginTransformations = getAllTransformations(
  51.                 selectedBeginWord,
  52.                 wordList,
  53.                 seenBeginSet
  54.             );
  55.            
  56.             beginQueue.push(...beginTransformations);
  57.         }
  58.        
  59.         beginTransformationsCount++;
  60.        
  61.         const endQueueLen = endQueue.length;
  62.         for (let i = 0; i < endQueueLen; i++) {
  63.             const selectedEndWord = endQueue.shift();
  64.             if (seenBeginSet.has(selectedEndWord)) {
  65.                 return beginTransformationsCount + endTransformationsCount;
  66.             }
  67.             seenEndSet.add(selectedEndWord);
  68.            
  69.             const endTransformations = getAllTransformations(
  70.                 selectedEndWord,
  71.                 endWordList,
  72.                 seenEndSet
  73.             );
  74.            
  75.             endQueue.push(...endTransformations);
  76.         }
  77.        
  78.         endTransformationsCount++;
  79.     }
  80.    
  81.     return 0;
  82. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement