zoukankan      html  css  js  c++  java
  • Java Word Ladder(字梯)

    问题:

    Given two words (start and end), and a dictionary, find the length of shortest transformation 
    sequence from start to end, such that:
    Only one letter can be changed at a time
    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.

    答案:

    import java.util.HashSet;
    import java.util.LinkedList;
    
    public class WordLadderTest1 {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		String start = "hit";
    		String end = "cog";
    		HashSet<String> dict = new HashSet<String>();
    		dict.add("hot");
    		dict.add("dot");
    		dict.add("dog");
    		dict.add("lot");
    		dict.add("cog");
    		System.out.println(ladderLength(start, end, dict));
    	}
    
    	 public static int ladderLength(String start, String end, HashSet<String> dict) {
    		 
    	        if (dict.size() == 0)  
    	            return 0; 
    	 
    	        LinkedList<String> wordQueue = new LinkedList<String>();
    	        LinkedList<Integer> distanceQueue = new LinkedList<Integer>();
    	 
    	        wordQueue.add(start);
    	        distanceQueue.add(1);
    	 
    	        while(!wordQueue.isEmpty()){
    	            String currWord = wordQueue.pop();
    	            Integer currDistance = distanceQueue.pop();
    	            if(currWord.equals(end)){
    	                return currDistance;
    	            }
    	            for(int i=0; i<currWord.length(); i++){
    	                char[] currCharArr = currWord.toCharArray();
    	                for(char c='a'; c<='z'; c++){
    	                    currCharArr[i] = c;
    	 
    	                    String newWord = new String(currCharArr);
    	                    if(dict.contains(newWord)){
    	                        wordQueue.add(newWord);
    	                        distanceQueue.add(currDistance+1);
    	                        dict.remove(newWord);
    	                    }
    	                }
    	            }
    	        }
    	 	        return 0;
    	    }
    }



     

  • 相关阅读:
    Consul运行
    springcloud+Zookeeper测试
    解决:sql2005 安装完后 没有服务的问题
    asp.net dataTable添加列
    C#关闭word进程
    无法将类型为“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Word._Application”
    C#网页采集
    C#计算时间差值
    C#播放声音
    C#打开得到路径
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/3928195.html
Copyright © 2011-2022 走看看