博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode: Word Ladder II [127]
阅读量:5164 次
发布时间:2019-06-13

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

【题目】

Given two words (start and end), and a dictionary, find all shortest transformation sequence(s) from start to end, such that:

  1. Only one letter can be changed at a time
  2. Each intermediate word must exist in the dictionary

For example,

Given:

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

Return

[    ["hit","hot","dot","dog","cog"],    ["hit","hot","lot","log","cog"]  ]

Note:

  • All words have the same length.
  • All words contain only lowercase alphabetic characters.

【题意】

    给定两个单词start和end, 一个词典,找到全部的最短转换序列。

几个注意事项:

    1. 每次变换仅仅能改变一个字符
    2. 变换的中间单词必须在词典中
    3. 全部单词长度同样
    4. 全部单词字符都小写

【思路】

     思路和word Ladder是同样的,仅仅只是本题须要把左右的序列输出。

     为了恢复转换序列在搜索的过程中,我们须要记录每一个可达单词的前继单词(所谓单词可达,就是start通过若干次字符变换后能够转换成当前单词)。

     一旦我们找到end, 我们就能够通过前继恢复路径。这跟用dijkstra找最短路径的方法事实上非常相似。

    

【代码】

class Solution {public:    void getSequences(vector
>&result, vector
&sequence, string&start, string end, map
>&percursors){ sequence.push_back(end); if(start==end){ vector
v=sequence; reverse(v.begin(), v.end()); result.push_back(v); return; } //找end的前驱 vector
pres = percursors[end]; for(int i=0; i
> findLadders(string start, string end, unordered_set
&dict) { vector
> result; if(start==end)return result; //记录前驱的map map
> percursors; //标记是否已经找到最短序列 bool isFind=false; //交替存储相邻 queue
q1; queue
q2; q1.push(start); //找前驱 while(!q1.empty() || !q2.empty()){ //存放当前层单词 set
words; if(!q1.empty()){ while(!q1.empty()){ string curword=q1.front(); q1.pop(); for(int i=0; i
::iterator it=words.begin(); it!=words.end(); it++){ q2.push(*it); dict.erase(*it); } } else{ while(!q2.empty()){ string curword=q2.front(); q2.pop(); for(int i=0; i
::iterator it=words.begin(); it!=words.end(); it++){ q1.push(*it); dict.erase(*it); } } if(isFind)break; } //生成全部序列 vector
sequence; getSequences(result, sequence, start, end, percursors); return result; }};

转载于:https://www.cnblogs.com/mqxnongmin/p/10569539.html

你可能感兴趣的文章
Arduino 报错总结
查看>>
树莓派Android Things物联网开发:树莓派GPIO引脚图
查看>>
矩阵快速幂---BestCoder Round#8 1002
查看>>
Hadoop HBase概念学习系列之HBase里的宽表设计概念(表设计)(二十七)
查看>>
Day03:Selenium,BeautifulSoup4
查看>>
awk变量
查看>>
mysql_对于DQL 的简单举例
查看>>
35. Search Insert Position(C++)
查看>>
[毕业生的商业软件开发之路]C#异常处理
查看>>
有关快速幂取模
查看>>
Linux运维必备工具
查看>>
字符串的查找删除
查看>>
NOI2018垫底记
查看>>
快速切题 poj 1002 487-3279 按规则处理 模拟 难度:0
查看>>
Codeforces Round #277 (Div. 2)
查看>>
【更新】智能手机批量添加联系人
查看>>
NYOJ-128前缀式计算
查看>>
Hive(7)-基本查询语句
查看>>
注意java的对象引用
查看>>
C++ 面向对象 类成员函数this指针
查看>>