zoukankan      html  css  js  c++  java
  • *级算法二【据说百度面试题】

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

    ===================
    当然了,这个题目肯定是要给出最优解法了。不然就没什么难度了。所以是要建立数学模型的。

    下面是我给出的算法:
    类似于C++中定义常量的方法:
    用一个足够大的十六进制数字,代表a,比如f(a)=F000;(排除3+6=2+7的可能性)
    然后,对任意字母x都采用下述方式代表:
    f(x)=pow(f(a),(x-a+1));
    那这样,每个单词的所有字母加起来所得的结果,为该单词的最终值。
    最终值一样的,就是兄弟了。
     
    (其实考虑到实际情况,用10表示A就足够了。更有甚者,用26位数的16进制0x000000...000来表示某个字母,第0位表示有单词中a字母的个数。然后对每个单词进行统计,结果比较数的大小。)

    另解:上述算法不够严谨,也就是说,如果有人故意说有几百个a的单词,那就不行了,这就需要用质数相乘法:定义a,b,c...分别为互不相等的质数。然后每个单词定义为这些质数相乘。结果一样即可。
  • 相关阅读:
    Hadoop集群安装
    Oracle ORA01555(快照过旧)
    selenium+java+testng+ant环境搭建
    selenium ssl
    watir识别IE版本号
    ruby and watir中timeout类的用法
    使用TestNGxslt
    ruby system用法
    IE6下调用inetcpl.cpl清除COOKIE的方法
    Shell实例:字符串操作 逻辑判断
  • 原文地址:https://www.cnblogs.com/aoyihuashao/p/1624069.html
Copyright © 2011-2022 走看看