LeetCode 每日一题 2020-11-5 (单词接龙)

127. 单词接龙

难度中等

给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则:

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

说明:

  • 如果不存在这样的转换序列,返回 0。
  • 所有单词具有相同的长度。
  • 所有单词只由小写字母组成。
  • 字典中不存在重复的单词。
  • 你可以假设 beginWord 和 endWord 是非空的,且二者不相同。

思路:

利用set表来存储目标字符串,queue队列来保存当前与目标字符串匹配的转换结果以及当前的操作次数;

pair  pair实际上是一个结构体,主要有两个成员变量 first,second,变量类型定义时决定。

目标字符串与当前字符串仅差一个字符的时候,将该目标字符串存储到队列中,并将该字符串从set中删除,防止多次访问该字符串。

    int ladderLength(string beginWord, string endWord, vector& wordList) {

        queue> M;

        unordered_set data(wordList.begin(),wordList.end());

        if(!data.count(endWord)) return 0;

        M.push({beginWord,1});

        int step;

        string temp;

        while(!M.empty()){

            temp=M.front().first;

            step=M.front().second;

            if(temp==endWord) return step;

            M.pop();

            char c;

            for(int i=0;i

                c=temp[i];

                for(char ch='a';ch<='z';++ch){

                    if(ch==c) continue;

                    temp[i]=ch;

                    if(data.count(temp)){

                        M.push({temp,step+1});

                        data.erase(temp);

                    }

                    temp[i]=c;

                }

            }

        }

        return 0;

    }

你可能感兴趣的:(LeetCode)