博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[CareerCup] 18.10 Word Transform 单词转换
阅读量:5943 次
发布时间:2019-06-19

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

 

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上有类似的题目和。我们的方法是写一个get_one_edit_words()函数,来返回某一个单词变动一个字母的所有可能情况,然后我们在transform函数中先将开始的单词存入一个队列queue中,还需要一个set来记录所有访问过的单词,还需要哈希表来建立当前单词和变换一步后的单词之间的映射,然后开始类似BFS的遍历,对于每一个单词,遍历get_one_edit_words()函数返回的结果,如果变换后的单词就是目标单词,则我们完成了变换,根据backtrack将整个路径上的单词存入结果中,如果变换单词不是目标单词,但是在字典中,如果没有在字典中,则我们将其排入queue,并加入visited,和建立哈希表的映射,继续遍历,参见代码如下:

 

set
get_one_edit_words(string word) { set
res; for (int i = 0; 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
transform(string start, string end, set
dict) { queue
q; set
visited; unordered_map
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
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 {};}

 

类似题目:

 

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

你可能感兴趣的文章
AlertDialog对话框
查看>>
我的友情链接
查看>>
linux安全---cacti+ntop监控
查看>>
鸟哥的linux私房菜-shell简单学习-1
查看>>
nagios配置监控的一些思路和工作流程
查看>>
通讯组基本管理任务三
查看>>
赫夫曼编码实现
查看>>
html页面显示div源代码
查看>>
基础复习-算法设计基础 | 复杂度计算
查看>>
debian、ubuntu系统下,常用的下载工具
查看>>
带以太网的MicroPython开发板:TPYBoardv201温湿度上传实例
查看>>
OSGI企业应用开发(十二)OSGI Web应用开发(一)
查看>>
Python 以指定概率获取元素
查看>>
微信公众平台图文教程(二) 群发功能和素材管理
查看>>
Centos下基于Hadoop安装Spark(分布式)
查看>>
wdcp 安装
查看>>
asterisk配置
查看>>
GA操作步骤和技巧(二)——用户行为分析
查看>>
shell中while循环里使用ssh的注意事项
查看>>
SHELL获取计算机外网ip的几种写法
查看>>