您的位置:首页 > 其它

LeetCode Word Ladder

2016-01-10 13:31 323 查看
Description:

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:

Only one letter can be changed at a time
Each intermediate word must exist in the word list

For example,

Given:

beginWord =
"hit"


endWord =
"cog"


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


As one shortest transformation is
"hit" -> "hot" -> "dot" -> "dog" -> "cog"
,

return its length
5
.

Solution:

第一反应就是最短路,dijkstra的做法就是BFS

这里有个小trick,为了省下使用visited数字,每次进入队列的String都直接去掉

<span style="font-size:18px;">import java.util.*;

public class Solution {
public int ladderLength(String beginWord, String endWord,
Set<String> wordList) {

LinkedList<String> queue = new LinkedList<String>();

queue.add(beginWord);
wordList.remove(beginWord);
int n = beginWord.length();
int step = 0;
String cur, neo;
char[] cur_char = new char
;
while (!queue.isEmpty()) {
int size = queue.size();
step++;
for (int i = 0; i < size; i++) {
cur = queue.poll();
cur_char = cur.toCharArray();
for (int j = 0; j < n; j++) {
for (int c = 'a'; c <= 'z'; c++) {
if (cur_char[j] == c)
continue;
cur_char[j] = (char) c;
neo = new String(cur_char);
if (neo.equals(endWord))
return step + 1;
if (wordList.contains(neo)) {
queue.add(neo);
wordList.remove(neo);
}
cur_char[j] = cur.charAt(j);
}
}
}
}

return 0;
}
}</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: