一个单词a,如果通过交换单词中字母的顺序可以得到另外的单词b,那么定义b是a的兄弟单词。现在有一个字典,用户输入一个单词,从字典找出这个单词有多少个兄弟单词

四种思路,由于思路和代码都比较简单,这里就不再赘述了。

思路一、最常规的解法,统计一下用户输入的单词出现的各个字母的个数,然后统计字典里面的单词的字母出现的个数,比对各个单词的各个字母出现的次数,即是兄弟单词。

这个解法常规但是效率不高,但是我们可以优化一下,先算出输入单词的长度,先遍历一遍字典,筛选出满足单词长度一样的单词,然后再进行匹配。

思路二、字典排序,根据字典排序,将输入的单词和字典单词按照字典序排序,然后比对。

思路三、面试官说用哈希,散列,我记得很清楚,不过我也没想出来这个怎么用哈希

思路四(最优解):数学方法参考网上的解答:
一个单词如果交换其所含字母顺序,得到的单词称为兄弟单词,例如mary和army是兄弟单词,即所含字母是一样的,只是字母顺序不同,用户输入一个单词,要求在一个字典中找出该单词的所有兄弟单词,并输出。给出相应的数据结构及算法。要求时间和空间复杂度尽可能低
目前思想:

struct {

char data;

int n

};

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

例如

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

f(abcd)=235*7=210

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

原文出处不详

posted @   小尾学长  阅读(710)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!
点击右上角即可分享
微信分享提示