`
风云叶易
  • 浏览: 2154 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

在字典中找一个单词的兄弟单词

阅读更多

一个单词如果交换其所含字母顺序,得到的单词称为兄弟单词,例如mary和army是兄弟单词,即所含字母是一样的,只是字母顺序不同,用户输入一个单词,要求在一个字典中找出该单词的所有兄弟单词,并输出。给出相应的数据结构及算法。要求时间和空间复杂度尽可能少。

 

目前思想:

struct {

   char  data;

   int  n

};

根据数学定理:任何一个大于1的自然数N,都可以唯一分解成有限个质数的乘积 N=(P_1^a1)*(P_2^a2)......(P_n^an) , 这里P_1

例如

a=2 b=3 c=5 d=7 e=11...

f(abcd)=2*3*5*7=210 

然后字典里找乘积210的位数相同的一定是这5个字母组合的单词就是兄弟单词

 

问题:

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

 

解法一:

使用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)。

分享到:
评论

相关推荐

    百度2012实习生校园招聘笔试题

    在这个问题中,我们需要找到一个单词的所有兄弟单词,即可以通过重新排列字母得到的单词。字典树的每个节点代表一个字符,节点的子节点代表该字符后面可能跟的字符。对于输入的单词,我们可以从根节点开始,沿着单词...

    华为-华为od题库练习题之查找兄弟单词.zip

    对于查找兄弟单词,如果构建一个单词的字典树,可以通过遍历树找到具有相同字符但顺序不同的单词。 3. 哈希表(Hash Table):哈希表提供快速的插入、删除和查找操作,它通过哈希函数将键映射到数组的索引上。在...

    Python查找相似单词的方法

    以下是一个实例,演示了如何使用Python来找出一个给定单词在字典中具有多少个兄弟单词。 首先,我们需要引入必要的库。`itertools`库提供了`tee`和`izip`函数,用于创建迭代器的副本和将迭代器打包成元组。`...

    新人教版九年级英语单词听写表.doc

    5. 句子:由一个或多个词汇组成的语言结构,表达完整的意思。 6. 有耐心的:形容词,指能够容忍等待,不易沮丧的品质。 7. 表情:面部或身体传达的情感或信息。 8. 发现:找到或揭示未知事物的过程。 9. 秘密:未...

    中级算法解析定义.pdf

    本问题主要探讨如何高效地找出一个单词的“兄弟单词”,即由相同字母但顺序不同的单词。以下是对这一问题的详细解析: 1. **兄弟单词定义**: 兄弟单词是指两个单词拥有完全相同的字母,但其字母顺序不同。例如,...

    常见算法笔试或面试题

    现在给你一个字典,用户输入一个单词,让你根据字典找出这个单词有多少个兄弟单词。 方法:将每个的单词按照字母排序,则兄弟单词拥有一致的字母排序(作为单词签名)。使用单词签名来查找兄弟单词。 6. 找出不...

    百度2012年实习生招聘笔试试题 -技术类

    对于用户输入的一个单词,根据给定的字典找出该单词的所有兄弟单词,并提供一种解决方案。 **知识点解析**: - **定义**:兄弟单词是指通过交换原单词中任意两个字符的位置而得到的新单词。 - **解决方案设计**: ...

    百度2012年实习生招聘笔试试题

    本题要求实现一个算法,用于在给定的字典中找出与用户输入的单词互为“兄弟”的所有单词。“兄弟单词”定义为可以通过交换输入单词中的字母顺序得到的另一个单词。例如,“army”和“mary”就是互为兄弟单词。 **...

    中考英语单词拼写专项训练300题.doc

    4. 兄弟(brother):在英语中,"brother"表示兄弟,根据上下文判断是否使用复数形式。 5. 香蕉(banana)和橘子(orange):这两个都是水果名称,复数形式分别是bananas和oranges。 6. 妇女(woman):"woman"的...

    百度2012实习生校园招聘Java工程师笔试试题

    - 在单词的末尾节点标记结束标志,并在节点的哈希表中记录此单词本身作为兄弟单词之一。 3. **查找兄弟单词**: - 对于输入的单词,从根节点开始遍历Trie树。 - 遍历过程中,尝试将单词的字符进行重新排列,形成...

    百度实习招聘软件研发试题

    题目要求找到与输入单词具有相同字符但排列不同的单词(即兄弟单词),并且这些单词存在于一个给定的字典中。 **数据结构选择:** 为了实现时间与空间的高效率,可以采用Trie树(前缀树)和Hash表相结合的方法。...

    2012年百度笔试题java方向

    当输入一个单词,将其字母排序后,通过散列函数找到对应的哈希表键值,键值链表中的所有单词即为输入单词的兄弟单词。 2. **线程与进程的区别及联系** - 知识点: 并发编程基础 - 区别: 进程是系统资源分配的基本...

    百度2012实习生校园招聘机器学习数据挖掘笔试试题

    **题目描述**:给定一个单词`a`,如果通过交换其中字母的位置可以得到另一个单词`b`,则称`b`是`a`的兄弟单词。例如,`army`和`mary`互为兄弟单词。现在需要提供一个解决方案,能够快速查找出用户输入的单词的所有...

    2012百度C和C++职位笔试题

    查找一个单词的兄弟单词,只需遍历该单词对应的路径,然后在相邻节点寻找其他可能的字母组合。时间复杂度为O(m),其中m为单词长度。 2. 多级分类数据结构: 为了存储三级分类的日志,可以使用多级哈希映射或者多维...

    五年级英语上册 单词中文教案 人教新版-人教版小学五年级上册英语教案.doc

    通过这个单元,学生可以学习到更多的生活物品名称,提高他们在实际生活场景中的英语沟通能力。 总结来说,这份教案涵盖了广泛的词汇和基本句型,旨在帮助五年级学生建立起英语基础,理解日常生活、人物特征、职业、...

    大厂面试系列二.pdf

    在字典中找出兄弟单词,即可以通过遍历字典中的每个单词,对每个单词进行重新排列,判断排列后的单词是否在字典中,从而找到兄弟单词。 找出数组中出现次数超过一半的数,可以使用摩尔投票法。该算法基于一个事实,...

    小学英语单词归纳总结.doc

    总之,这个小学英语单词归纳总结文档是一个全面的资源,它覆盖了学习中基础且重要的词汇,对小学生和初学者的英语学习具有极大的帮助。通过学习和记忆这些词汇,孩子们可以更自信地用英语进行日常对话和书面表达,...

    最新中考英语单词拼写专项训练300题汇编.doc

    4. 兄弟(brother):询问Jim是否是Kate的兄弟,"brother"用于表示家庭中的男性同胞关系。 5. 香蕉(banana)和橘子(orange):这里是两种水果的名称,"banana"为复数形式,"oranges"也是复数形式。 6. 妇女...

    小学英语单词大全字母顺序.doc

    这份文档中,每个单词都对应了相应的中文翻译,方便学生理解记忆。下面将按照词汇的分类进行详细解释: 1. **人物与职业**:如`accountant`(会计)、`actor`(男演员)、`actress`(女演员)、`assistant`(售货员...

Global site tag (gtag.js) - Google Analytics