• [leetcode]127. Word Ladder单词接龙


    Given two words (beginWord and endWord), and a dictionary's word list, 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 transformed word must exist in the word list. Note that beginWord is not a transformed word.

    Note:

    • Return 0 if there is no such transformation sequence.
    • All words have the same length.
    • All words contain only lowercase alphabetic characters.
    • You may assume no duplicates in the word list.
    • You may assume beginWord and endWord are non-empty and are not the same.

    Example 1:

    Input:
    beginWord = "hit",
    endWord = "cog",
    wordList = ["hot","dot","dog","lot","log","cog"]
    
    Output: 5
    
    Explanation: As one shortest transformation is "hit" -> "hot" -> "dot" -> "dog" -> "cog",
    return its length 5.

    思路

    BFS

    代码

     1 class Solution {
     2    public int ladderLength(String beginWord, String endWord, List<String> wordList) {
     3     // use dict to check duplicats 
     4     Set<String> dict = new HashSet<>(wordList);
     5     Queue<String> queue = new LinkedList<>();
     6     queue.add(beginWord);
     7     int level = 0;
     8     while(!queue.isEmpty()){
     9         int size = queue.size();
    10         for(int i = 0; i < size; i++){
    11             String cur = queue.remove();
    12             if(cur.equals(endWord)){ return level + 1;}
    13             for(int j = 0; j < cur.length(); j++){
    14                 // hit -> {'h', 'i', 't'}
    15                 char[] charArray = cur.toCharArray();
    16                 for(char c = 'a'; c <='z'; c++){
    17                     // {'h', 'i', 't'} for'h', try checking 'a','b'...'z' which forms ait, bit...zit
    18                     charArray[j] = c;
    19                     String temp = new String(charArray);
    20                     if(dict.contains(temp)){
    21                         queue.add(temp);
    22                         // to avoid dead loop, like hit will find hit itself
    23                         dict.remove(temp);
    24                     }
    25                 }
    26             }
    27         }
    28         level++;
    29     }
    30     return 0;
    31  }
    32 }
  • 相关阅读:
    Java语言
    包名规范
    带参数的方法
    成员变量和局部变量
    Java数据类型
    java反射机制
    JDK安装
    注释
    二维数组
    数组的经典排序
  • 原文地址:https://www.cnblogs.com/liuliu5151/p/9823991.html
Copyright © 2020-2023  润新知