• 恐怖级算法二【据说百度面试题】


    给你一个单词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...分别为互不相等的质数。然后每个单词定义为这些质数相乘。结果一样即可。
  • 相关阅读:
    underscore.js,jquery.js源码阅读
    css3动画知识点
    ajax防止重复提交
    jquery data属性的使用
    文字换行
    vue的生命周期
    iphone与安卓的兼容性问题汇总
    python 上下文管理器
    form 校验
    常用的字段和字段参数
  • 原文地址:https://www.cnblogs.com/aoyihuashao/p/1624069.html
Copyright © 2020-2023  润新知