Saturday, January 11, 2014

Word Ladder LeetCode

思路很简单。用一个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