当前位置: 首页 > news >正文

[LeetCode 127] - 单词梯(Word Ladder)

问题

给出两个单词(start和end)与一个字典,找出从start到end的最短转换序列的长度。规则如下:

  • 一次只能改变一个字母
  • 中间单词必须在字典里存在

例如:

给出

start = "hit"
end = 
"cog"
dict = 
["hot","dot","dog","lot","log"]

因为其中一条最短的转换序列为"hit" -> "hot" -> "dot" -> "dog" -> "cog",返回它的长度5。

注意

  • 如果不存在转换序列,返回0
  • 所有单词的长度一样
  • 所有单词中只有小写字母

 

初始思路

有了单词梯II的分析,本题就很容易实现了。这里我们选择双vector的方案来进行改造。需要注意的几点:

  • 只需要返回最短序列的长度,找到一个就可以返回了
  • 同样由于只需返回长度,不需要像单词梯II那样每过一层才能把用过的单词去掉,使用一次就可以去除了。
  • 每处理完一个vector表示一层处理结束,对当前序列长度加1

改造后的代码如下:

 1 class Solution {
 2 public:
 3     int ladderLength(std::string start, std::string end, std::unordered_set<std::string> &dict)
 4     {
 5         std::vector<std::unordered_set<std::string>> candidates(2);
 6         
 7         int current = 0;
 8         int previous = 1;
 9         int ladderLength = 1;
10         
11         candidates[current].insert(start);
12         dict.erase(start);
13         
14         while(true)
15         {
16             current = !current;
17             previous = !previous;
18             
19             candidates[current].clear();
20             
21             for(auto iter = candidates[previous].begin(); iter != candidates[previous].end(); ++iter)
22             {
23                 for(size_t pos = 0; pos < iter->size(); ++pos)
24                 {
25                     std::string word = *iter;
26                     for(int i = 'a'; i <= 'z'; ++i)
27                     {
28                         if(word[pos] == i)
29                         {
30                             continue;
31                         }
32                         
33                         word[pos] = i;
34                         
35                         if(dict.count(word) > 0)
36                         {
37                             if(word == end)
38                             {
39                                 return ladderLength + 1;
40                             }
41                             
42                             candidates[current].insert(word);
43                             dict.erase(word);
44                         }
45                     }
46                 }
47             }
48             ++ladderLength;
49             
50             if (candidates[current].size() == 0)
51             {
52                 return 0;
53             }
54         }
55         
56         return 0;
57     }
58 };
双vector BFS

提交后一次通过Judge Small和Judge Large。

转载于:https://www.cnblogs.com/shawnhue/archive/2013/06/06/leetcode_127.html

相关文章:

  • Intellij IDEA + Jrebel 双神器组合提高生产力
  • 【centos 】putty 登陆linux慢
  • WPF,Silverlight与XAML读书笔记第四十二 - 多媒体支持之音、视频和语音
  • C#公历转农历的简单方法
  • 与搜索引擎谈一场亲密的恋爱
  • Assemblies,Metadata and Runtime Services In C++/CLI
  • VC执行VBS脚本
  • 70个非常酷和时尚的iOS应用程序图标
  • C# 3.0语言特性
  • xcode中c语言scanf的问题
  • taobao开源项目
  • Vim升华之树形目录插件NERDTree安装图解
  • Manifest文件的配置
  • 最新JAVA编程题全集(50题及答案)
  • 强大的命令行工具wmic
  • angular学习第一篇-----环境搭建
  • input实现文字超出省略号功能
  • Java Agent 学习笔记
  • java多线程
  • Java深入 - 深入理解Java集合
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • Linux后台研发超实用命令总结
  • Puppeteer:浏览器控制器
  • Python十分钟制作属于你自己的个性logo
  • SpiderData 2019年2月16日 DApp数据排行榜
  • Tornado学习笔记(1)
  • zookeeper系列(七)实战分布式命名服务
  • 产品三维模型在线预览
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 删除表内多余的重复数据
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 收藏好这篇,别再只说“数据劫持”了
  • 微信小程序开发问题汇总
  • 我的业余项目总结
  • 详解NodeJs流之一
  • 自制字幕遮挡器
  • 函数计算新功能-----支持C#函数
  • #define与typedef区别
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (六)Hibernate的二级缓存
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • **PHP分步表单提交思路(分页表单提交)
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .bat批处理(一):@echo off
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .net 程序发生了一个不可捕获的异常
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • [C]编译和预处理详解