博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
根据一个单词找所有的兄弟单词的思想如何处理
阅读量:5170 次
发布时间:2019-06-13

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

问题:给定一个单词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

你可能感兴趣的文章
Leetcode 508. Most Frequent Subtree Sum
查看>>
单机配置tomcat 8 集群
查看>>
python-线程互斥锁与递归锁
查看>>
异界冒险
查看>>
Unity3D:UGUI遍历子控件
查看>>
Fizz Buzz 面试题
查看>>
HDU-2027
查看>>
关于 Java 数组的 12 个最佳方法
查看>>
java中强制类型转换
查看>>
合并查找到的文件,至新的文件中
查看>>
Hibernate —— 映射关联关系
查看>>
UVA - 10129 Play on Words(欧拉回路)
查看>>
Spring MVC 基于URL的映射规则(注解版)
查看>>
Elasticsearch增删改查 之 —— mget多文档查询
查看>>
fineui中前端自定义函数
查看>>
静态页面放图片及居中
查看>>
0310复利计算
查看>>
写一篇总结
查看>>
兼容IE8以下,获取className节点的元素(document.getElementsByClassName()兼容写法)。
查看>>
UTF与ascii区别
查看>>