最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • LeetCode题解:127. 单词接龙,BFS+生成所有可能新单词再匹配,JavaScript,详细注释

    正文概述 掘金(LeeChen)   2020-12-18   558

    原题链接:127. 单词接龙

    解题思路:

    1. 使用队列进行BFS,队列中的每个元素都存储当前层的字符串与当前转换长度。
    2. 将wordList保存为Set,用于查找每一层转换的单词,如果找到就从Set中删除,以减少遍历次数。
    3. 每次循环都出队一个元素,同时生成当前单词所有可能被替换的情况,以单词hit为例,新生成的单词为it、ht、hi*,*号可被a-z替代。
    4. 将所有可能的新单词在wordList中,表示该单词为下一层的元素,即可把该单词入队,同时转换长度加一。
    5. 如果新单词与endWord相等,表示找到了最短转换序列,返回当前长度即可。
    6. 需要注意的测试用例:
    "ymain"
    "oecij"
    ["ymann","yycrj","oecij","ymcnj","yzcrj","yycij","xecij","yecij","ymanj","yzcnj","ymain"]
    
    /**
     * @param {string} beginWord
     * @param {string} endWord
     * @param {string[]} wordList
     * @return {number}
     */
    var ladderLength = function (beginWord, endWord, wordList) {
      // 将起始词存入队列,开始搜索
      // 队列中的每个元素都保存了当前单词,以及当前元素所在的层次
      let queue = [[beginWord, 1]];
      let wordSet = new Set(wordList); // 将wordList保存为Set,用于遍历
    
      // 遍历队列,直到队列中元素全部出队,即为完成搜索
      while (queue.length) {
        // 将队列中的元素出队
        let [str, count] = queue.shift();
    
        // 遍历当前单词的每个字符
        for (let i = 0; i < str.length; i++) {
          // 生成a-z的字符
          for (let j = 97; j < 123; j++) {
            // 以单词hit为例,此处生成的是该单词中每个字母所有可能变化情况
            // 即为*it、h*t、hi*,*号可被a-z替代
            const newWord =
              str.slice(0, i) + String.fromCharCode(j) + str.slice(i + 1);
    
            // 判断新生成的单词是否在Set中
            if (wordSet.has(newWord)) {
              // 如果新生成的单词与目标相同,表示找到了最小路径,返回当前转换长度
              if (newWord === endWord) {
                return count + 1;
              }
              // 将新单词存入队列,并将转换长度加一,表示进入了下一层遍历
              queue.push([newWord, count + 1]);
              // 在Set中删除已遍历过的单词,避免重复遍历
              wordSet.delete(newWord);
            }
          }
        }
      }
    
      // 如果退出循环,表示未找到路径,返回长度为0
      return 0;
    };
    

    起源地下载网 » LeetCode题解:127. 单词接龙,BFS+生成所有可能新单词再匹配,JavaScript,详细注释

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元