题目要求

Given two words (beginWord and endWord), and a dictionary's word list, find the length of shortest transformation sequence from beginWord to endWord, such that:Only one letter can be changed at a time.
Each transformed word must exist in the word list. Note that beginWord is not a transformed word.
For example,Given:
beginWord = "hit"
endWord = "cog"
wordList = ["hot","dot","dog","lot","log","cog"]
As one shortest transformation is "hit" -> "hot" -> "dot" -> "dog" -> "cog",
return its length 5.Note:
Return 0 if there is no such transformation sequence.
All words have the same length.
All words contain only lowercase alphabetic characters.
You may assume no duplicates in the word list.
You may assume beginWord and endWord are non-empty and are not the same.

假设输入两个单词beginWord,endWord以及一个字典。每一次操作只能对当前单词修改一个字符成为字典中的一个单词。问至少需要多少次操作可以将beginWord转化为endWord。如果不可转换则返回0。

思路与代码

其实如果从递归的角度来看,并非不可以实现。每一种普遍情况也就是将当前单词修改一个字符成为当前字典中的一个单词。但是这种要遍历所有的情况,哪怕是已经超过最小操作次数的情况,导致代码超时。其实从另一个角度来说,这道题可以看做是广度优先算法的一个展示。

按上文中的题目为例,可以将广度优先算法写成以下形式。

    hit/hot/ \
dot  lot
/    /
dog  log
/     /
cog  cog

也就是说,将每一层上可以生成的单词全部列出来,然后再逐层遍历,一旦出现一个单词等于endWord,那么遍历终止,将当前遍历的次数返回。这里要注意的是,需要将已经遍历的单词记录下来,从而不会发生重复的情况。

代码

    //和字典中单词比较是否可以转换public boolean canTransform(String word1, String word2){for(int i = 0, count=0 ; i<word1.length() ; i++){if(word1.charAt(i)!=word2.charAt(i) && ++count>1) return false;}return true;}public int ladderLength(String beginWord, String endWord, List<String> wordList){Queue<String> q = new LinkedList<String>();q.add(beginWord);int steps = 0;while(!q.isEmpty()){int size = q.size();for(int i = 0 ;i<size ; i++){String temp = q.poll();if(temp.equals(endWord)){return steps+1;}for(Iterator<String> iterator = wordList.iterator() ; iterator.hasNext();){String current = iterator.next();if(canTransform(current, temp)){iterator.remove();q.offer(current);}}}steps++;}return 0;}


想要了解更多开发技术,面试教程以及互联网公司内推,欢迎关注我的微信公众号!将会不定期的发放福利哦~

leetcode127. Word Ladder相关推荐

  1. PHP第五周答案,算法设计与分析第五周作业——Word Ladder

    算法设计与分析第五周作业--Word Ladder 上周找了一道深度搜索优先搜索的算法题来做,于是这周就选了一道广度优先搜索算法题来试试手. 本周所选题目:原题目链接 题目详情 题目大意:给出一个字符 ...

  2. 【难点+重点BFS】LeetCode 126. Word Ladder II

    LeetCode 126. Word Ladder II Solution1: 参考自花花酱:http://zxi.mytechroad.com/blog/searching/leetcode-126 ...

  3. 【重点BFS】LeetCode 127. Word Ladder

    LeetCode 127. Word Ladder Solution1:我的超过40%的AC的答案 原先利用BFS做但是内存溢出未能AC:进过修改加上了标记是否访问过的visited数组,可以AC啦~ ...

  4. LeetCode 127. Word Ladder

    原题链接在这里:https://leetcode.com/problems/word-ladder/ 题目: Given two words (beginWord and endWord), and ...

  5. 算法细节系列(20):Word Ladder系列

    算法细节系列(20):Word Ladder系列 详细代码可以fork下Github上leetcode项目,不定期更新. 题目摘自leetcode: 1. Leetcode 127: Word Lad ...

  6. 33 单词接龙(Word Ladder)

    文章目录 1 题目 2 解决方案 2.1 思路 2.2 图解 2.2 时间复杂度 2.3 空间复杂度 3 源码 1 题目 题目:单词接龙(Word Ladder) 描述:给出两个单词(start和en ...

  7. Word Ladder

    LeetCode[127. Word Ladder] 题解 难度[medium] 题目: Given two words (beginWord and endWord), and a dictiona ...

  8. Leetcode的word ladder问题

    127. Word Ladder 题意如下: 给定一个开始字符串和结束字符串以及含有大量字符串的字典,要求通过一定规则,能从开始字符串变换到结束字符串,求其最小变换字符串数目,该规则如下: 1 从开始 ...

  9. Word Ladder系列

    1.Word Ladder 问题描述: 给两个word(beginWord和endWord)和一个字典word list,找出从beginWord到endWord之间的长度最长的一个序列,条件: 1. ...

最新文章

  1. java 投票ip限制_java 限定网站在指定IP段访问
  2. css 图片居中放大,不同比例图片居中缩放显示的三种方法
  3. python 在列表中完成队列的删除和排序
  4. (二)GitHub的使用随记
  5. java传值的代码_SpringMVC的简单传值(实现代码)
  6. 安卓逆向_5 --- Android 学习
  7. java编译命令带参数_java编译命令基础知识点
  8. 次世代3d游戏建模,零基础的小白可以学吗?
  9. 哈夫曼算法(最优二叉树)
  10. [转] 计算机视觉领域稍微容易中的期刊
  11. [Python] itertools.islice(iterable, start, stop[, step]) 创建迭代器并返回所选元素
  12. 锋利的jQuery-4--图片切换的一个例子(自己理解后写的,以备忘记时看看)
  13. 别再 select * 了,送你 12 个查询技巧!
  14. TensorFlow+pytorch+gpu+anaconda极简安装教程
  15. 无数本高清古籍善本下载,200多个G
  16. 猫(Modem)和路由器有什么区别?
  17. mysql oracle minus_Oracle minus使用
  18. win10部署docker后无法启用VMware虚拟机
  19. 让我摘下星星送给你_想摘下星星给你,就摘下月亮给你。什么歌?
  20. 【OQPSK】基于MATLAB/FPGA的OQPSK实现

热门文章

  1. python字典类型可迭代_核心数据类型--字典
  2. 显示锁 java_第十三章:显示锁——Java并发编程实战
  3. python大数据处理mapreduce_使用python构建基于hadoop的mapreduce日志分析平台
  4. linux acl库编译与使用,linux的ACL-rds数据删除了可恢复吗?-WinFrom控件库|.net开源控件库|HZHControls官网...
  5. 《以截屏为基础的演示文档制作软件》(ScreenSteps Pro)更新v2.9.1/含注册机[压缩包]...
  6. 智能一代云平台(八):代码依赖分析系统
  7. Erlang之父Joe Armstrong去世
  8. 微信AI正在完成:有码走遍天下,从此花钱刷脸
  9. 三星宣布7nm LPP芯片量产!性能高20%,功耗降50%,面积降40%
  10. IBM新创AI病毒:想打谁就打谁,看脸发作绝不误伤,隐蔽性极强