zoukankan      html  css  js  c++  java
  • leetcode——127.单词接龙

    图的广度优先遍历,,,没能做出来。。。

    public int ladderLength(String beginWord, String endWord, List<String> wordList) {
            // 先将 wordList 放到哈希表里,便于判断某个单词是否在 wordList 里
            Set<String> wordSet = new HashSet<>(wordList);
            if (wordSet.size() == 0 || !wordSet.contains(endWord)) {
                return 0;
            }
            wordSet.remove(beginWord);
    
            // 图的广度优先遍历,必须使用的队列和表示是否访问过的 visited (数组,哈希表)
            Queue<String> queue = new LinkedList<>();
            queue.offer(beginWord);
    
            Set<String> visited = new HashSet<>();
            visited.add(beginWord);
    
            int wordLen = beginWord.length();
            // 包含起点,因此初始化的时候步数为 1
            int step = 1;
            while (!queue.isEmpty()) {
    
                int currentSize = queue.size();
                for (int i = 0; i < currentSize; i++) {
                    // 依次遍历当前队列中的单词
                    String word = queue.poll();
                    char[] charArray = word.toCharArray();
    
                    // 修改每一个字符
                    for (int j = 0; j < wordLen; j++) {
                        // 一轮以后应该重置,否则结果不正确
                        char originChar = charArray[j];
    
                        for (char k = 'a'; k <= 'z'; k++) {
                            if (k == originChar) {
                                continue;
                            }
    
                            charArray[j] = k;
                            String nextWord = String.valueOf(charArray);
    
                            if (wordSet.contains(nextWord)) {
                                if (nextWord.equals(endWord)) {
                                    return step + 1;
                                }
    
                                if (!visited.contains(nextWord)) {
                                    queue.add(nextWord);
                                    // 注意:添加到队列以后,必须马上标记为已经访问
                                    visited.add(nextWord);
                                }
                            }
                        }
                        // 恢复
                        charArray[j] = originChar;
                    }
                }
                step++;
            }
            return 0;
        }

     ——2020.8.3

    我的前方是万里征途,星辰大海!!
  • 相关阅读:
    【2020NOI.AC省选模拟#5】C. 光滑序列
    【2020NOI.AC省选模拟#2】A. 旋转
    【2020NOI.AC省选模拟#1】B. Trie
    Redis 配置
    Redis 删除策略
    Redis 事务
    Redis 持久化
    Redis 通用指令
    Redis 数据类型实战案例
    Redis sorted_set
  • 原文地址:https://www.cnblogs.com/taoyuxin/p/13424871.html
Copyright © 2011-2022 走看看