博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode 127. 单词接龙 bfs
阅读量:3904 次
发布时间:2019-05-23

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

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

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

说明:

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

示例 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" 不在字典中,所以无法进行转换。

 想了个最简单的方法,想着可能超时,结果没超时。。。但是复杂度很高。。。

原因出现在字符串查找是否入队上和vector选种元素的删除上。

附上第一次写的代码:

C++:
 

class Solution {public:    struct node    {        int num;        string s;    };    int ladderLength(string beginWord, string endWord, vector
& wordList) { queue
q; int Size=wordList.size(); int vis[Size+1]; memset (vis,0,sizeof(vis)); node now,next; now.num=1; now.s=beginWord; q.push(now); while (!q.empty()) { now=q.front(); q.pop(); if(now.s==endWord) return now.num; for (int i=0;i

看了别人的代码, 恍然大悟。。 。

然后模仿大佬的代码写了一个, 发现果然快了好多。 。

代码如下:

class Solution {public:    int ladderLength(string beginWord, string endWord, vector
& wordList) { queue
q; map
m1; //储存vector中的字符串便于查找是否存在 map
re; //储存结果 int Size=wordList.size(); for (int i=0;i

 

转载地址:http://avaen.baihongyu.com/

你可能感兴趣的文章
专业音频术语中英文对照
查看>>
集成电路专业术语简介
查看>>
成长日记
查看>>
从3个科技公司里学到的57条经验
查看>>
程序员应该投资的10件事
查看>>
多媒体
查看>>
沟通技巧
查看>>
专业camera/isp术语中英文对照
查看>>
摄像头
查看>>
我的理想,我的奋斗目标
查看>>
Nginx基于多域名、多端口、多IP配置虚拟主机
查看>>
一次Linux 系统受攻击的解决过程
查看>>
最新最全Apache源码编译安装
查看>>
最新mysql数据库源码编译安装。
查看>>
第一章 vue入门
查看>>
Linux文件引用计数的逻辑
查看>>
linux PCIe hotplug arch analysis
查看>>
LDD3 study note 0
查看>>
cpio compress and extract
查看>>
PCI SMMU parse in ACPI
查看>>