【刷题】Leetcode 127. Word Ladder

6 篇文章 0 订阅

又写一道好老好老的题。第一次见到是。。。。四年前了吧,老得我都觉得自己没啥长进了。

正能量正能量!

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.
Example 2:

Input:
beginWord = “hit”
endWord = “cog”
wordList = [“hot”,“dot”,“dog”,“lot”,“log”]

Output: 0

Explanation: The endWord “cog” is not in wordList, therefore no possible transformation.

双向广度优先搜索,同时从起点和终点搜索。
Runtime: 61 ms, faster than 54.54% of Java online submissions for Word Ladder.
试了一下 ,并不比单向快,不知道哪有问题不。

class Solution {
    
    public int ladderLength(String beginWord, String endWord, List<String> wordList) {
        if(wordList.indexOf(endWord) == -1)
            return 0;
        int length = 0;
        HashSet<String> set = new HashSet<String>();
        for(String s: wordList){
            set.add(s);
        }
        Queue<String> qStart = new LinkedList<String>();
        qStart.offer(beginWord);
        Queue<String> qEnd = new LinkedList<String>();
        qEnd.offer(endWord);
        while(!qStart.isEmpty() || !qEnd.isEmpty()){
            length++;
          int size = qStart.size();
            for(int i = 0; i < size; i++){
                String str = qStart.poll();                
                for(int j = 0; j < str.length(); j++){
                    char[] chars = str.toCharArray();
                    for(char c = 'a'; c < 'z'; c++){
                        chars[j] = c;
                        String newString = String.valueOf(chars);
                        if(qEnd.contains(newString))
                            return length + 1;
                        if(set.contains(newString)){                        
                            qStart.offer(newString);
                            set.remove(newString);                         
                        }
                    }
                }             
        } 
         Queue<String> temp = new LinkedList<String>();
         temp = qStart;
         qStart = qEnd;
         qEnd = temp;                             
        }
      return 0;                                                           
   }
}

在这里插入图片描述
图转自花花酱

单向广度。
速度还是可以的。
Runtime: 45 ms, faster than 82.10% of Java online submissions for Word Ladder.

class Solution {
    public int ladderLength(String beginWord, String endWord, List<String> wordList) {
        if(wordList.indexOf(endWord) == -1)
            return 0;
        int length = 1;
        HashSet<String> set = new HashSet<String>();
        for(String s: wordList){
            set.add(s);
        }
        Queue<String> q = new LinkedList<String>();
        q.offer(beginWord);
        while(!q.isEmpty()){
            length++;
            int size = q.size();
            for(int i = 0; i < size; i++){
                String str = q.poll();                
                for(int j = 0; j < str.length(); j++){
                    char[] chars = str.toCharArray();
                    for(char c = 'a'; c < 'z'; c++){
                        chars[j] = c;
                        String newString = String.valueOf(chars);
                        if(newString.equals(endWord))
                            return length;
                        if(set.contains(newString)){                        
                            q.offer(newString);
                            set.remove(newString);                         
                        }
                    }
                }
            }
        }
        return 0;                           
    }
                          
                           
}

总结

  • 用set,否则的话,TimeExceedingLimit!
  • 用queue的话,先把size算出来int size = q.size();,要不得size不变了吗
  • for(char c = ‘a’; c < ‘z’; c++)遍历,
  • set.remove(newString); 遍历过的remove掉
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值