[CareerCup] 18.10 Word Transform 单词转换
18.10 Given two words of equal length that are in a dictionary, write a method to transform one word into another word by changing only one letter at a time. The new word you get in each step must be in the dictionary.
这道题让我们将一个单词转换成另一个单词,每次只能改变一个字母,让我们输出中间转换过程的单词。LeetCode上有类似的题目One Edit Distance和Edit Distance。我们的方法是写一个get_one_edit_words()函数,来返回某一个单词变动一个字母的所有可能情况,然后我们在transform函数中先将开始的单词存入一个队列queue中,还需要一个set来记录所有访问过的单词,还需要哈希表来建立当前单词和变换一步后的单词之间的映射,然后开始类似BFS的遍历,对于每一个单词,遍历get_one_edit_words()函数返回的结果,如果变换后的单词就是目标单词,则我们完成了变换,根据backtrack将整个路径上的单词存入结果中,如果变换单词不是目标单词,但是在字典中,如果没有在字典中,则我们将其排入queue,并加入visited,和建立哈希表的映射,继续遍历,参见代码如下:
set<string> get_one_edit_words(string word) {
set<string> res;
for (int i = ; i < word.size(); ++i) {
string t = word;
for (char c = 'a'; c <= 'z'; ++c) {
if (c != word[i]) {
t[i] = c;
res.insert(t);
}
}
}
return res;
}
vector<string> transform(string start, string end, set<string> dict) {
queue<string> q;
set<string> visited;
unordered_map<string, string> backtrack;
q.push(start);
visited.insert(start);
while (!q.empty()) {
string w = q.front(); q.pop();
for (string v : get_one_edit_words(w)) {
if (v == end) {
vector<string> res{v};
while (!w.empty()) {
res.insert(res.begin(), w);
w = backtrack[w];
}
return res;
}
if (dict.count(v)) {
if (!visited.count(v)) {
q.push(v);
visited.insert(v);
backtrack[v] = w;
}
}
}
}
return {};
}
类似题目:
[CareerCup] 18.10 Word Transform 单词转换的更多相关文章
- 对C++ Primer的10.3.9单词转换的思考
这篇代码有几个知识点可以复习一下,而且小白学到了新知识o(╯□╰)o #include <iostream> #include <string> #include <ma ...
- 最短路径算法-Dijkstra算法的应用之单词转换(词梯问题)(转)
一,问题描述 在英文单词表中,有一些单词非常相似,它们可以通过只变换一个字符而得到另一个单词.比如:hive-->five:wine-->line:line-->nine:nine- ...
- C++ Primer : 第十一章 : 关联容器示例: 一个单词转换的map
单词转换就是:将一些缩写的单词转换为实际的文本.第一个文件保存的是转换的规则,而第二个文件保存的是要转换的文本. 假设单词转换的规则的文件如下: brb be right back k okay? y ...
- [STL]单词转换
如果单词转换文件的内容是: 'em themcuz becausegratz grateful i Inah nopos ...
- 单词转换成向量形式 word2vec
word2vec(word to vector)是一个将单词转换成向量形式的工具.可以把对文本内容的处理简化为向量空间中的向量运算,计算出向量空间上的相似度,来表示文本语义上的相 似度.word2ve ...
- CSS 3学习——transform 2D转换
首先声明一点,transform属性不为none的元素是它的定位子元素(绝对定位和固定定位)的包含块,而且对内创建一个新的层叠上下文. 注意:可以通过 transform-box 属性指定元素的那个盒 ...
- oracle转Mysql中,varchar2(10)和number应该转换为什么类型?
一. varchar2(10)和number应该转换为什么类型? oracle转成mysql时:varchar2(10)可以转成varchar(10)number则要看oracle中存储的具体是什么类 ...
- JAVA:借用OpenOffice将上传的Word文档转换成Html格式
为什么会想起来将上传的word文档转换成html格式呢?设想,如果一个系统需要发布在页面的文章都是来自word文档,一般会执行下面的流程:使用word打开文档,Ctrl+A,进入发布文章页面,Ctrl ...
- oracle转Mysql中,varchar2(10)和number应该转换为什么类型? (转)
一. varchar2(10)和number应该转换为什么类型? oracle转成mysql时:varchar2(10)可以转成varchar(10)number则要看oracle中存储的具体是什么类 ...
随机推荐
- Waiting Processed Cancelable ShowDialog (Release 2)
namespace Test { using System; using System.Windows.Forms; static class Program { /// <summary> ...
- 外键为','(逗号)拼接ID,连接查询外键表ID
select distinct pipeId=substring(a.PipeIn,b.number,charindex(',',a.PipeIn+',',b.number)-b.number) fr ...
- POJ 3241 Object Clustering 曼哈顿最小生成树
Object Clustering Description We have N (N ≤ 10000) objects, and wish to classify them into severa ...
- POJ 3140 Contestants Division 树形DP
Contestants Division Description In the new ACM-ICPC Regional Contest, a special monitoring and su ...
- Java优化之输出十万以内的质数
(1)未经优化时所耗费的时间: public class PrimeNumber { public static void main(String[] args) { long start = Sys ...
- 移动开单扫描终端-全触屏互联网安卓打印扫描 PDAPOS机——开单扫描POS-移动开单扫描POS
浩瀚云POS是一款自主研发的全触屏互联网POS,一贯以领先的技术.快捷友好的用户体验和在全国广泛覆盖的网络,为电子商务.提供安全.可靠.保密的数据校验服务.作为其研发的一款专业移动开单扫描终端. 互联 ...
- http://chenzhou123520.iteye.com/blog/1811340
http://chenzhou123520.iteye.com/blog/1811340
- volicity 模板类,java操作配置文件
import java.io.StringWriter; import java.util.HashSet; import java.util.Iterator; import java.util.M ...
- 每天一个linux命令---curl
linux curl是一个利用URL规则在命令行下工作的文件传输工具.详细请参考:http://www.codesky.net/article/201010/170043.html 例如:curl ' ...
- React版本修改内容
React新版本(0.12.2)在2014年12月18日发布,对比了我之前用的v0.11.2版本改动很大,基本的写法被扩展,让我顿时感觉自己又要重新开始.坑啊~ 事已至此,必须重新适应,首先我们来看看 ...