博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode]题解(python):126-Word Ladder II
阅读量:7222 次
发布时间:2019-06-29

本文共 2607 字,大约阅读时间需要 8 分钟。

题目来源:

  https://leetcode.com/problems/word-ladder-ii/


 

题意分析:

  给定一个beginWord和一个endWord,以及一个字典单词,找出所有从beginWord变成endWord的所有最短路径,单词变化每次只能变一个字母,所变的字母必须在字典里面。


 

题目思路:

  这是一个最短路径问题。首先将beginWord放进队列,当队列不为空的时候,pop出第一个数,将它周围的在字典的push进队列。要注意的是将字段的数push进队列的同时,将其路径用dict记录下来。


 

代码(python):

  

1 class Solution(object): 2     def findLadders(self, beginWord, endWord, wordlist): 3         """ 4         :type beginWord: str 5         :type endWord: str 6         :type wordlist: Set[str] 7         :rtype: List[List[int]] 8         """ 9         ans,q = {},[]10         q.append(beginWord)11         ans[beginWord] = [[beginWord]]12         ans[endWord] = []13         while len(q) != 0:14             tmp = q.pop(0)15             for i in range(len(beginWord)):16                 part1,part2 = tmp[:i],tmp[i + 1:]17                 for j in "abcdefghijklmnopqrstuvwxyz":18                     if tmp[i] != j:19                         newword = part1 + j + part220                         if newword == endWord:21                             for k in ans[tmp]:22                                 ans[endWord].append(k + [endWord])23                             while len(q) != 0:24                                 tmp1 = q.pop(0)25                                 if len(ans[tmp1][0]) >= len(ans[endWord][0]):26                                     break27                                 for ni in range(len(beginWord)):28                                     npart1,npart2 = tmp1[:ni],tmp1[ni+1:]29                                     for nj in "abcdefghijklmnopqrstuvwxyz":30                                         if tmp1[ni] != nj:31                                             nw = npart1 + nj + npart232                                             if endWord == nw:33                                                 for nk in ans[tmp1]:34                                                     ans[endWord].append(nk + [endWord])35                             break36                         if newword in wordlist:37                             q.append(newword)38                             ans[newword] = []39                             for k in ans[tmp]:40                                 ans[newword].append(k + [newword])41                             wordlist.remove(newword)42                         elif newword in ans and len(ans[newword][0]) == len(ans[tmp][0]) + 1:43                             for k in ans[tmp]:44                                 ans[newword].append(k + [newword])45         return ans[endWord]46                             47
View Code

 

转载于:https://www.cnblogs.com/chruny/p/5306540.html

你可能感兴趣的文章
PyCharm搭建GO开发环境(GO语言学习第1课)
查看>>
Android交互
查看>>
提醒我喝水chrome插件开发指南
查看>>
列表数据转树形数据
查看>>
eclipse的离线汉化
查看>>
Java新版本的开发已正式进入轨道,版本号18.3
查看>>
从零开始的webpack生活-0x009:FilesLoader装载文件
查看>>
在electron中实现跨域请求,无需更改服务器端设置
查看>>
gitlab-ci配置详解(一)
查看>>
centos安装java运行环境jdk+tomcat
查看>>
《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
查看>>
分享自己折腾多时的一套 vue 组件 --we-vue
查看>>
使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
查看>>
Akka系列(七):Actor持久化之Akka persistence
查看>>
创建一个Struts2项目maven 方式
查看>>
数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
查看>>
纯 javascript 半自动式下滑一定高度,导航栏固定
查看>>
「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
查看>>
Rancher-k8s加速安装文档
查看>>
create-react-app项目添加less配置
查看>>