zoukankan      html  css  js  c++  java
  • LeetCode OJ

    我觉得这道题比较难,主要是因为对于我来说:

    1. 我没有把这个问题联想到树的宽度遍历(即便没有考虑树的宽度遍历,也是可以做的,但是我一开始实现的代码却是深度遍历,后来发现树的BFS一般使用queue实现的,貌似没有递归的方法??

    2. 即使在意识到用BFS,却还有一个陷阱:我是对字典进行了BFS,这个说实话,代码长,还TLE;

    后来参考了前辈的代码,采用对26个单词进行枚举,才解决了这个问题。

    下面是AC代码:

     1 /**
     2      * Given two words (start and end), and a dictionary, find the length of shortest transformation sequence from start to end, 
     3      * BFS && 26 characters
     4      * @param start
     5      * @param end
     6      * @param dict
     7      * @return
     8      */
     9     public int ladderLength(String start, String end, HashSet<String> dict){
    10         if(start.equals(end))
    11             return 2;
    12         //for BFS 
    13         LinkedList<String> queue = new LinkedList<String>();
    14         //store the words that have visited and in the dict
    15         HashSet<String> visited = new HashSet<String>();
    16         //the level information for every word
    17         LinkedList<Integer> level = new LinkedList<Integer>();
    18         queue.offer(start);
    19         level.offer(1);
    20         while(!queue.isEmpty()){
    21             String interW = queue.poll();
    22             int le = level.poll();
    23             
    24             //for every character in the word
    25             for(int i=0;i<interW.length();i++){
    26                 
    27                 char[] words = interW.toCharArray();
    28                 char o = words[i];//the original word
    29                 for(char c='a';c<='z';c++)
    30                 {
    31                     if(c!=o){
    32                         //subsitude by another char
    33                         words[i] = c;    
    34                         String changed = new String(words);
    35                         if(changed.equals(end))
    36                             return le+1;
    37                         if((!visited.contains(changed)) && dict.contains(changed)){
    38                             visited.add(changed);
    39                             queue.offer(changed);
    40                             level.offer(le+1);
    41                         }
    42                     }
    43                 }
    44                 
    45             }
    46         }
    47         return 0;
    48     }
    有问题可以和我联系,bettyting2010#163 dot com
  • 相关阅读:
    hdu4020简单想法题
    hdu4020简单想法题
    hdu4284 dfs+floyd
    hdu4284 dfs+floyd
    hdu4282 x^z+y^z+x*y*z=k 解的个数
    hdu4282 x^z+y^z+x*y*z=k 解的个数
    hdu4279 找规律+小想法
    hdu4279 找规律+小想法
    hdu3665 水最短路
    hdu3665 水最短路
  • 原文地址:https://www.cnblogs.com/echoht/p/3700419.html
Copyright © 2011-2022 走看看