思路很简单。用一个queue储存BST过程中经过的结点。为了防止会重复,搞一个HashMap,存储经历过的String,这样再次经过的时候,不将String放入Queue中。 HashMap中还有一个作用,就是可以存储从Start开始每个String距离这个start的距离。
简单讲: Queue BST
HashMap 防止重复,记录距离。
注意:HashSet里面的function应该是contains,写的太快写成了containsKey.
public int ladderLength(String start, String end, HashSet<String> dict) {
Queue<String> q = new LinkedList<String>();
Map<String, Integer> ladderMap = new HashMap<String, Integer>();
q.offer(start);
ladderMap.put(start,1);
//BST
while(!q.isEmpty()){
String head = q.poll();
int ladderLength = ladderMap.get(head)+1;
for (int i=0; i<head.length();i++){
StringBuilder sb = new StringBuilder(head);
for (char letter='a'; letter<='z'; letter++){
sb.setCharAt(i, letter);
String nextWord = sb.toString();
if (nextWord.equals(end)) return ladderLength;
if (!ladderMap.containsKey(nextWord)&&dict.contains(nextWord)){
ladderMap.put(nextWord, ladderLength);
q.offer(nextWord);
}
}
}
}
return 0;
}
No comments:
Post a Comment