Find Shortest Word Edit Path in python

Are Warlocks Arcane or Divine?

How can a jailer prevent the Forge Cleric's Artisan's Blessing from being used?

Greatest common substring

Indicating multiple different modes of speech (fantasy language or telepathy)

Reply ‘no position’ while the job posting is still there (‘HiWi’ position in Germany)

Adding empty element to declared container without declaring type of element

How to check participants in at events?

What was required to accept "troll"?

Is there enough fresh water in the world to eradicate the drinking water crisis?

The most efficient algorithm to find all possible integer pairs which sum to a given integer

Freedom of speech and where it applies

Does "Dominei" mean something?

Bob has never been a M before

The One-Electron Universe postulate is true - what simple change can I make to change the whole universe?

Resetting two CD4017 counters simultaneously, only one resets

Lightning Web Component - do I need to track changes for every single input field in a form

Can I use my Chinese passport to enter China after I acquired another citizenship?

Was the picture area of a CRT a parallelogram (instead of a true rectangle)?

Can a malicious addon access internet history and such in chrome/firefox?

Visiting the UK as unmarried couple

Are taller landing gear bad for aircraft, particulary large airliners?

Female=gender counterpart?

Why are on-board computers allowed to change controls without notifying the pilots?

Word describing multiple paths to the same abstract outcome



Find Shortest Word Edit Path in python














0












$begingroup$


Find the Shortest Word Edit Path



I was given this problem from an interview. 
#Given two words source and target, and a list of words words,
#find the length of the shortest series of edits that transforms source to target.
#Each edit must change exactly one letter at a time, and each
#intermediate word (and the final target word) must exist in words.



If the task is impossible, return -1.



Examples:



source = "bit", target = "dog" words = ["but", "put", "big", "pot",
"pog", "dog", "lot"]



output: 5 explanation: bit -> but -> put -> pot -> pog -> dog has 5
transitions. source = "no", target = "go" words = ["to"]



output: -1




def one_letter_difference(current_word, next_word):
count = 0
for i in range(len(current_word) -1):

if current_word[i] != next_word[i]:
count += 1;
if count == 1:
return True
else:
return False

def shortestWordEditPath(source, target, words):
"""
@param source: str
@param target: str
@param words: str[]
@return: int

Input: source = "bit", target = "dog"
words = ["but", "put", "big", "pot", "pog", "dog", "lot"]

Output: 5
explanation:
1 -> 1 -> 1 -> 1 -> 1
(source) bit -> but -> put -> pot -> pog -> dog (target)
has minimum of 5 transitions
"""
graph =

for i in range(-1, len(words)):
if i == -1:
current_word = source
else:
current_word = words[i]
graph[current_word] = []
for word in range(len(words)):
next_word = words[word]
if one_letter_difference(current_word, next_word):
graph[current_word].append(next_word)

#perform BFS
queue = collections.deque()
seen = set() # visited words
queue.append([source, 1])
seen.add(source)

while len(queue) > 0:
current, distance = queue.popleft()
if current == target: return distance
for neighbor in graph[current]:
if neighbor not in seen:
queue.append([neighbor, distance +1])
seen.add(neighbor)
return -1

source = "bit"
target = "dog"
words = ["but", "put", "big", "pot", "pog", "dog", "lot"]
test = shortestWordEditPath(source, target,words)
print(test)








share









$endgroup$
















    0












    $begingroup$


    Find the Shortest Word Edit Path



    I was given this problem from an interview. 
    #Given two words source and target, and a list of words words,
    #find the length of the shortest series of edits that transforms source to target.
    #Each edit must change exactly one letter at a time, and each
    #intermediate word (and the final target word) must exist in words.



    If the task is impossible, return -1.



    Examples:



    source = "bit", target = "dog" words = ["but", "put", "big", "pot",
    "pog", "dog", "lot"]



    output: 5 explanation: bit -> but -> put -> pot -> pog -> dog has 5
    transitions. source = "no", target = "go" words = ["to"]



    output: -1




    def one_letter_difference(current_word, next_word):
    count = 0
    for i in range(len(current_word) -1):

    if current_word[i] != next_word[i]:
    count += 1;
    if count == 1:
    return True
    else:
    return False

    def shortestWordEditPath(source, target, words):
    """
    @param source: str
    @param target: str
    @param words: str[]
    @return: int

    Input: source = "bit", target = "dog"
    words = ["but", "put", "big", "pot", "pog", "dog", "lot"]

    Output: 5
    explanation:
    1 -> 1 -> 1 -> 1 -> 1
    (source) bit -> but -> put -> pot -> pog -> dog (target)
    has minimum of 5 transitions
    """
    graph =

    for i in range(-1, len(words)):
    if i == -1:
    current_word = source
    else:
    current_word = words[i]
    graph[current_word] = []
    for word in range(len(words)):
    next_word = words[word]
    if one_letter_difference(current_word, next_word):
    graph[current_word].append(next_word)

    #perform BFS
    queue = collections.deque()
    seen = set() # visited words
    queue.append([source, 1])
    seen.add(source)

    while len(queue) > 0:
    current, distance = queue.popleft()
    if current == target: return distance
    for neighbor in graph[current]:
    if neighbor not in seen:
    queue.append([neighbor, distance +1])
    seen.add(neighbor)
    return -1

    source = "bit"
    target = "dog"
    words = ["but", "put", "big", "pot", "pog", "dog", "lot"]
    test = shortestWordEditPath(source, target,words)
    print(test)








    share









    $endgroup$














      0












      0








      0





      $begingroup$


      Find the Shortest Word Edit Path



      I was given this problem from an interview. 
      #Given two words source and target, and a list of words words,
      #find the length of the shortest series of edits that transforms source to target.
      #Each edit must change exactly one letter at a time, and each
      #intermediate word (and the final target word) must exist in words.



      If the task is impossible, return -1.



      Examples:



      source = "bit", target = "dog" words = ["but", "put", "big", "pot",
      "pog", "dog", "lot"]



      output: 5 explanation: bit -> but -> put -> pot -> pog -> dog has 5
      transitions. source = "no", target = "go" words = ["to"]



      output: -1




      def one_letter_difference(current_word, next_word):
      count = 0
      for i in range(len(current_word) -1):

      if current_word[i] != next_word[i]:
      count += 1;
      if count == 1:
      return True
      else:
      return False

      def shortestWordEditPath(source, target, words):
      """
      @param source: str
      @param target: str
      @param words: str[]
      @return: int

      Input: source = "bit", target = "dog"
      words = ["but", "put", "big", "pot", "pog", "dog", "lot"]

      Output: 5
      explanation:
      1 -> 1 -> 1 -> 1 -> 1
      (source) bit -> but -> put -> pot -> pog -> dog (target)
      has minimum of 5 transitions
      """
      graph =

      for i in range(-1, len(words)):
      if i == -1:
      current_word = source
      else:
      current_word = words[i]
      graph[current_word] = []
      for word in range(len(words)):
      next_word = words[word]
      if one_letter_difference(current_word, next_word):
      graph[current_word].append(next_word)

      #perform BFS
      queue = collections.deque()
      seen = set() # visited words
      queue.append([source, 1])
      seen.add(source)

      while len(queue) > 0:
      current, distance = queue.popleft()
      if current == target: return distance
      for neighbor in graph[current]:
      if neighbor not in seen:
      queue.append([neighbor, distance +1])
      seen.add(neighbor)
      return -1

      source = "bit"
      target = "dog"
      words = ["but", "put", "big", "pot", "pog", "dog", "lot"]
      test = shortestWordEditPath(source, target,words)
      print(test)








      share









      $endgroup$




      Find the Shortest Word Edit Path



      I was given this problem from an interview. 
      #Given two words source and target, and a list of words words,
      #find the length of the shortest series of edits that transforms source to target.
      #Each edit must change exactly one letter at a time, and each
      #intermediate word (and the final target word) must exist in words.



      If the task is impossible, return -1.



      Examples:



      source = "bit", target = "dog" words = ["but", "put", "big", "pot",
      "pog", "dog", "lot"]



      output: 5 explanation: bit -> but -> put -> pot -> pog -> dog has 5
      transitions. source = "no", target = "go" words = ["to"]



      output: -1




      def one_letter_difference(current_word, next_word):
      count = 0
      for i in range(len(current_word) -1):

      if current_word[i] != next_word[i]:
      count += 1;
      if count == 1:
      return True
      else:
      return False

      def shortestWordEditPath(source, target, words):
      """
      @param source: str
      @param target: str
      @param words: str[]
      @return: int

      Input: source = "bit", target = "dog"
      words = ["but", "put", "big", "pot", "pog", "dog", "lot"]

      Output: 5
      explanation:
      1 -> 1 -> 1 -> 1 -> 1
      (source) bit -> but -> put -> pot -> pog -> dog (target)
      has minimum of 5 transitions
      """
      graph =

      for i in range(-1, len(words)):
      if i == -1:
      current_word = source
      else:
      current_word = words[i]
      graph[current_word] = []
      for word in range(len(words)):
      next_word = words[word]
      if one_letter_difference(current_word, next_word):
      graph[current_word].append(next_word)

      #perform BFS
      queue = collections.deque()
      seen = set() # visited words
      queue.append([source, 1])
      seen.add(source)

      while len(queue) > 0:
      current, distance = queue.popleft()
      if current == target: return distance
      for neighbor in graph[current]:
      if neighbor not in seen:
      queue.append([neighbor, distance +1])
      seen.add(neighbor)
      return -1

      source = "bit"
      target = "dog"
      words = ["but", "put", "big", "pot", "pog", "dog", "lot"]
      test = shortestWordEditPath(source, target,words)
      print(test)






      python interview-questions





      share












      share










      share



      share










      asked 2 mins ago









      NinjaGNinjaG

      833632




      833632




















          0






          active

          oldest

          votes











          Your Answer





          StackExchange.ifUsing("editor", function ()
          return StackExchange.using("mathjaxEditing", function ()
          StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
          StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
          );
          );
          , "mathjax-editing");

          StackExchange.ifUsing("editor", function ()
          StackExchange.using("externalEditor", function ()
          StackExchange.using("snippets", function ()
          StackExchange.snippets.init();
          );
          );
          , "code-snippets");

          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "196"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader:
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          ,
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );













          draft saved

          draft discarded


















          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216209%2ffind-shortest-word-edit-path-in-python%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes















          draft saved

          draft discarded
















































          Thanks for contributing an answer to Code Review Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid


          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.

          Use MathJax to format equations. MathJax reference.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216209%2ffind-shortest-word-edit-path-in-python%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          कुँवर स्रोत दिक्चालन सूची"कुँवर""राणा कुँवरके वंशावली"

          Why is a white electrical wire connected to 2 black wires?How to wire a light fixture with 3 white wires in box?How should I wire a ceiling fan when there's only three wires in the box?Two white, two black, two ground, and red wire in ceiling box connected to switchWhy is there a white wire connected to multiple black wires in my light box?How to wire a light with two white wires and one black wireReplace light switch connected to a power outlet with dimmer - two black wires to one black and redHow to wire a light with multiple black/white/green wires from the ceiling?Ceiling box has 2 black and white wires but fan/ light only has 1 of eachWhy neutral wire connected to load wire?Switch with 2 black, 2 white, 2 ground and 1 red wire connected to ceiling light and a receptacle?

          चैत्य भूमि चित्र दीर्घा सन्दर्भ बाहरी कडियाँ दिक्चालन सूची"Chaitya Bhoomi""Chaitya Bhoomi: Statue of Equality in India""Dadar Chaitya Bhoomi: Statue of Equality in India""Ambedkar memorial: Centre okays transfer of Indu Mill land"चैत्यभमि