leetcode--Word Ladder

本文介绍了一种算法,用于寻找两个单词间最短转换路径的方法。通过改变一个字母将起始单词逐步转化为目标单词,每一步都要确保中间结果存在于字典中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given two words (beginWord and endWord), and a dictionary, find the length of shortest transformation sequence from beginWord to endWord, such that:

  1. Only one letter can be changed at a time
  2. Each intermediate word must exist in the dictionary

For example,

Given:
start = "hit"
end = "cog"
dict = ["hot","dot","dog","lot","log"]

As one shortest transformation is "hit" -> "hot" -> "dot" -> "dog" -> "cog",
return its length 5.

Note:

  • Return 0 if there is no such transformation sequence.
  • All words have the same length.
  • All words contain only lowercase alphabetic characters.
[java]  view plain  copy
  1. public class Solution {  
  2.     public int ladderLength(String beginWord, String endWord, Set<String> wordDict) {  
  3.         class WordNode{  
  4.             String word;  
  5.             int step;  
  6.             public WordNode(String word, int step) {  
  7.                 super();  
  8.                 this.word = word;  
  9.                 this.step = step;  
  10.             }                         
  11.         }         
  12.         Queue<WordNode> queue = new LinkedList<WordNode>();  
  13.         queue.add(new WordNode(beginWord,1));  
  14.         wordDict.add(endWord);  
  15.         while(!queue.isEmpty()){  
  16.             WordNode cur = queue.poll();  
  17.             if(cur.word.equals(endWord)){  
  18.                 return cur.step;  
  19.             }else{  
  20.                 char[] arr = cur.word.toCharArray();  
  21.                 for(int i=0;i<arr.length;i++){  
  22.                     for(int c='a';c<='z';c++){  
  23.                         char temp = arr[i];  
  24.                         if(c!=temp){  
  25.                             arr[i] = (char) c;  
  26.                         }  
  27.                         String str = new String(arr);  
  28.                         if(wordDict.contains(str)){  
  29.                             queue.add(new WordNode(str, cur.step+1));  
  30.                             wordDict.remove(str);  
  31.                         }  
  32.                         arr[i] = temp;  
  33.                     }  
  34.                 }  
  35.             }  
  36.         }  
  37.         return 0;  
  38.     }  
  39. }  

原文链接http://blog.youkuaiyun.com/crazy__chen/article/details/46523161

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值