无序的字符串匹配---传说百度题

 话说一道百度的题目如下:

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

 

 

解答 : 这个其实是算是无序的字符串的匹配问题。一般来说,我们要一个一个比较和查找,看两个串是否完全相等。

          不过其实我们可以换一个想法,为每一个字符分配一个素数,那么一个字符串可以唯一表示成所有组成字母的乘积,这个属性仅仅表示了组成的元素而忽略了组成的顺序。

 

           设数组 primelem[26] = {2, 3, 5, 7, 11, 13, ....,}

          

           对一个字符串来说s = "acd", 则属性  attr =  primelem['a'-'a'] *  primelem['c'-'a'] *  primelem['d'-'a'];

          

           于是得到检索算法入下:

            1. 对字典中的每个单词,求出他的 attri值,保存在一个数组中。

            2. 对欲检索的单词,求出他的attri值,为attr-search

            3. 遍历字典的atrri数组,所有和attr-search相等的位置多对应的单词都是所求的兄弟单词

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值