单词接龙(BFS+剪枝)

单词接龙

题目:单词接龙

给你两个单词 beginWord 和 endWord 和一个字典 wordList ,找到从 beginWord 到 endWord 的最短转换序列中的单词数目,转换规则如下:

    每次转换只能改变一个字母。
    转换过程中的中间单词必须是字典 wordList 中的单词。

如果不存在这样的转换序列,返回 0。

输入:beginWord = "hit", endWord = "cog", wordList = ["hot","dot","dog","lot","log","cog"]
输出:5
解释:一个最短转换序列是 "hit" -> "hot" -> "dot" -> "dog" -> "cog", 返回它的长度 5。

 

题解

    从beginWord开始,依次遍历符合要求的字符,直到找到结果为止。

代码:

class Solution {
        public boolean isSimilar(String temp, String str) {
            if (temp.length() != str.length())
                return false;

            int sum = 0;
            for (int i = 0; i < temp.length(); i++) {
                if (temp.charAt(i) != str.charAt(i))
                    sum++;
                if (sum > 1) return false;
            }
            return true;
        }

        public int ladderLength(String beginWord, String endWord, List<String> wordList) {
            Queue<String> queue = new ArrayDeque<>();
            queue.add(beginWord);
            Set<String> set = new HashSet<>();

            int res = 1;
            while (!queue.isEmpty() && set.size() != wordList.size()) {
                res += 1;
                int l = queue.size();

                for (int i = 0; i < l; i++) {
                    String temp = queue.poll();
                    for (String str : wordList) {
                        if (!set.contains(str) && isSimilar(temp, str)) {
                            if (str.equals(endWord))
                                return res;
                            set.add(str);
                            queue.add(str);
                        }
                    }
                }
            }
            return 0;
        }
    }
posted @ 2021-12-19 19:18  言思宁  阅读(34)  评论(0编辑  收藏  举报