Word Ladder

来源:互联网 发布:javascript 有api吗 编辑:程序博客网 时间:2024/05/18 15:27

1.题目

给出两个单词(start和end)和一个字典,找到从start到end的最短转换序列

比如:

  1. 每次只能改变一个字母。
  2. 变换过程中的中间单词必须在字典中出现。

注意事项

  • 如果没有转换序列则返回0。
  • 所有单词具有相同的长度。
  • 所有单词都只包含小写字母。

给出数据如下:

start ="hit"

end = "cog"

dict = ["hot","dot","dog","lot","log"]

一个最短的变换序列是"hit" ->"hot" -> "dot" -> "dog" -> "cog"

返回它的长度 5

2.算法

每次改变单词的一个字母,然后逐渐搜索,像这种求最短路径、树最小深度问题bfs最适合,

    public int ladderLength(String start, String end, Set<String> dict)     {        // write your code here    if (start == null || end == null || start.length() == 0 || end.length() == 0 || start.length() != end.length())    {    return 0;    }    LinkedList<String> queue = new LinkedList<String>();    HashSet<String> visit = new HashSet<String>();    int level = 1;    int lastNum = 1;    int curNum = 0;    queue.offer(start);    visit.add(start);    while (!queue.isEmpty())    {    String cur = queue.poll();    lastNum--;    for (int i = 0; i < cur.length(); i++)    {    char[] charCur = cur.toCharArray();    for (char c = 'a'; c <= 'z'; c++)    {    charCur[i] = c;    String temp = new String(charCur);    if (temp.equals(end))    {    return level + 1;    }    if (dict.contains(temp) && !visit.contains(temp))    {    curNum++;    queue.offer(temp);    visit.add(temp);    }    }    }    if (lastNum == 0)    {    lastNum = curNum;    curNum = 0;    level++;    }    }    return 0;    }


0 0
原创粉丝点击