问题:给定一个单词a,如果通过交换单词中字母的顺序可以得到另外的单词b,那么定义b是a的兄弟单词,例如单词abbsd和dabbs互为兄弟单词。现在给定一个字典,用户输入一个单词,如何根据字典找出这个单词有哪些兄弟单词?要求时间和空间效率尽可能的高。

解法一:

使用hash_map和链表。

首先定义一个key,使得兄弟单词有相同的key,不是兄弟的单词有不同的key。例如,将单词按字母从小到大重新排序后作为其key,比如bad的key为abd,good的key为dgoo。

使用链表将所有兄弟单词串在一起,hash_map的key为单词的key,value为链表的起始地址。

开始时,先遍历字典,将每个单词都按照key加入到对应的链表当中。当需要找兄弟单词时,只需求取这个单词的key,然后到hash_map中找到对应的链表即可。

这样创建hash_map时时间复杂度为O(n),查找兄弟单词时时间复杂度是O(1)。

解法二:

同样使用hash_map和链表。

将每一个字母对应一个质数,然后让对应的质数相乘,将得到的值进行hash,这样兄弟单词的值就是一样的了,并且不同单词的质数相乘积肯定不同。

使用链表将所有兄弟单词串在一起,hash_map的key为单词的质数相乘积,value为链表的起始地址。

对于用户输入的单词进行计算,然后查找hash,将链表遍历输出就得到所有兄弟单词。

这样创建hash_map时时间复杂度为O(n),查找兄弟单词时时间复杂度是O(1)。

转载于:https://www.cnblogs.com/wyf-love-dch/p/11535955.html

根据一个单词找所有的兄弟单词的思想如何处理相关推荐

  1. 华为机试 HJ27 查找兄弟单词

    题目链接:https://www.nowcoder.com/practice/03ba8aeeef73400ca7a37a5f3370fe68?tpId=37&tqId=21250&r ...

  2. 程序员面试金典——解题总结: 9.17中等难题 17.9设计一个方法,找出任意指定单词在一本书中的出现频率

    #include <iostream> #include <stdio.h> #include <vector> #include <string.h> ...

  3. 寻找兄弟单词(2012.5.6百度实习)

    题目:一个单词单词字母交换,可得另一个单词,如army->mary,成为兄弟单词.提供一个单词,在字典中找到它的兄弟.描述数据结构和查询过程. 解法一:使用hash_map和链表 (1)首先定义 ...

  4. 华为机试HJ27:查找兄弟单词

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 定义一个单词的"兄弟单词"为:交换该单词字母顺序(注:可以交换任 ...

  5. python:查找兄弟单词

    题目描述 定义一个单词的"兄弟单词"为:交换该单词字母顺序,而不添加.删除.修改原有的字母就能生成的单词. 兄弟单词要求和原来的单词不同.例如:ab和ba是兄弟单词.ab和ab则不 ...

  6. C++ 编程题/单词倒排,骆驼命名法,查找兄弟单词

    问答题 问答题1:TCP建立连接的过程采用三次握手,已知第三次握手报文的发送序列号为 1000,确认序列号为 2000,请问第二次握手报文的发送序列号和确认序列号分别为? 已知第三次握手的发送序列号和 ...

  7. vc6开发一个抓包软件_惊奇软件[21]:这是一个程序员开发的背单词网站,可好用了!...

    惊奇软件 未经授权禁止转载 正文--------------------------------- 哔哩哔哩小破站的UP主们就是厉害...... 就在前几天,小编我想找一款背单词的软件(某百词用的有点 ...

  8. c语言 单词长度统计,编写一个程序,打印输入中单词长度的直方图

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #define inside 1 #define outside 0 /*编写一个程序,统计并打印输入单词不同长度的个数,并打印输入中单 ...

  9. c语言编写计算单词长度,编写一个程序,打印输入中单词长度的直方图

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #define inside 1 #define outside 0 /*编写一个程序,统计并打印输入单词不同长度的个数,并打印输入中单 ...

  10. c语言,成绩输出直方图,编写一个程序,打印输入中单词长度的直方图

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #define inside 1 #define outside 0 /*编写一个程序,统计并打印输入单词不同长度的个数,并打印输入中单 ...

最新文章

  1. lsit集合去重复 顶级表达式
  2. mysql自带的监控报告_MYSQL监控-自带工具Query Profiler的使用
  3. 2、Power Query-动态汇总单元格区域数据
  4. 提示No Launcher activity found
  5. .NET 6 中的 Logging Source Generator
  6. java 运行os文件路径_Java获取文件路径的几种方式
  7. python学习 第一篇 基础
  8. 关于服务器虚化的优势,vmware虚化优势.docx
  9. java(5)---static修饰符
  10. Fedora上配置一个安全FTP
  11. shell 编程基础
  12. ES6的介绍和let的使用|-ES6连载1
  13. 机器学习落地的五个阶段
  14. sap 界面创建凭证_在sap系统设置纸张打印格式(针式打印机)
  15. 字体大宝库:40款好看的英文手写字体下载
  16. JDBC 实现数据库增删改查
  17. php使用excel公式,使用PHPExcel上的公式问题(Excel2007)
  18. fpga 中的slew rate 什么意思
  19. xib、stoaryboard详解
  20. Win10不进行操作很快自动睡眠、休眠的解决方法

热门文章

  1. 中虚数怎么表示_虚数是负数的平方根,为什么在三次方程中才出现的呢?|高中篇3...
  2. SpringMVC学习(一)SpringMVC入门 、HelloSpringMVC程序、SpringMVC执行原理
  3. 项目中的每个层的理念是什么?
  4. pp什么叫php的事务,ThinkPHP5.0框架事务处理操作简单示例
  5. fast recovery area oracle,oracle Fast Recovery Area的管理
  6. SpringBoot Field aFeign in xxxx required a bean of type 'xxx' that could not be found.
  7. Nginx 反向代理解决浏览器跨域问题
  8. 微信运营:必须收藏的101条万能微信标题公式
  9. JS获取DropDownList的value值与text值
  10. 自增、主键的优缺点(数据库)