日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

单词接龙(力扣第127题)

發布時間:2023/12/15 综合教程 43 生活家
生活随笔 收集整理的這篇文章主要介紹了 单词接龙(力扣第127题) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目:

給定兩個單詞(beginWord和 endWord)和一個字典,找到從beginWord 到endWord 的最短轉換序列的長度。轉換需遵循如下規則:

  每次轉換只能改變一個字母。
  轉換過程中的中間單詞必須是字典中的單詞。
說明:

  如果不存在這樣的轉換序列,返回 0。
  所有單詞具有相同的長度。
  所有單詞只由小寫字母組成。
  字典中不存在重復的單詞。
  你可以假設 beginWord 和 endWord 是非空的,且二者不相同。

示例1:

輸入:
beginWord = "hit",
endWord = "cog",
wordList = ["hot","dot","dog","lot","log","cog"]

輸出: 5

解釋: 一個最短轉換序列是 "hit" -> "hot" -> "dot" -> "dog" -> "cog",
     返回它的長度 5。

示例2:

輸入:
beginWord = "hit"
endWord = "cog"
wordList = ["hot","dot","dog","lot","log"]

輸出:0

解釋:endWord "cog" 不在字典中,所以無法進行轉換。

分析:

  目標是找到從beginWord 到endWord 的最短轉換序列的長度。本質就是求最短路徑,而且中間單詞必須位于字典中,不能是其他的,同時根據題意可以endWord也必須在字典中,否則就沒辦法進行最后一步的轉換,如果endWord不在字典中,那就不存在從beginWord 到endWord的最短轉換序列,返回值也就為0。

  這些單詞的長度都一樣,一次轉換只能轉換一個字母,也就是說當前單詞和轉換后的單詞不同的地方只在某一個字符處,其他地方的字符都必須是相同的。那么我們可以采取BFS算法進行搜索:

    從beginWord開始,其作為第一層,序列長度設為1,從字典中尋找所有與其相差只有一個字母且未被訪問的單詞放入BFS的下一層結點集合中;

    當前層遍歷完成之后,序列長度加1,然后進入下一層的遍歷,要求在當前的序列長度下將一層的所有結點遍歷完畢(出棧),而至于每一層究竟有多少個結點,這在開始每一層的遍歷之前會先計算出來;

    重復以上的操作,第一次遇到endWord時,就將當前序列長度加1,然后立即返回。

代碼:

public int ladderLength(String beginWord, String endWord, List<String> wordList) {

        if (!wordList.contains(endWord)){
            return 0;
        }

        boolean[] isVisited = new boolean[wordList.size()];
        LinkedList<String> queue = new LinkedList<>();

        queue.offer(beginWord);
        int count = 0;
        String flag = "";
        while (!queue.isEmpty()){

            int unum = queue.size();
            count++;
            while (unum-- > 0){

                String cur = queue.poll();

                for (int i = 0; i < wordList.size(); i++) {

                    if (cur.length() - commonStr(cur,wordList.get(i)) == 1 && !isVisited[i]){
                        isVisited[i] = true;
                        queue.offer(wordList.get(i));
                        if (wordList.get(i).equals(endWord)){
                            flag = wordList.get(i);
                            return count + 1;
                        }
                    }
                }
            }

        }
        return flag.equals(endWord) ? count:0;
    }

    private int commonStr(String str1,String str2){

        int length = 0;
        int i = 0;
        int j = 0;

        while (i < str1.length() && j < str2.length()){

            if (str1.charAt(i) == str2.charAt(j)){
                length++;

            }
            i++;
            j++;
        }
        return length;
    }

總結

以上是生活随笔為你收集整理的单词接龙(力扣第127题)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。