如何在gethash javascript函数中查找具有特定字母的字符串


function getHash( string ) {  
let h = 7, letters = "acdefhlmnoprstuw";   
for( var i = 0; i < string.length; i++ ) {  
h = ( h * 37 + letters.indexOf( string[ i ] ) );  
}  
return h;  
}

我的任务是编写一段代码,查找包含以下字母的字符串:ACDEFHLMNOPRSTUW
因此,函数getHash(搜索字符串(得到18794359164的结果。

我不会给你一些代码,只是一些提示。

为了理解代码,你有,你想得到的是,带上一个字符串,从中得到一个哈希值

例如,取'wonder'并获取

19017519751

作为散列值。

该值包含一个起始值7(h = 7(,对于每个字母,它将h37相乘(该值看起来像是为37个不同的字符创建的(,并将letters的索引值相加。

要获得与数值相反的结果,您需要用37将除法的剩余部分分开,以获得字母的索引,与使用字母完全相反,并向哈希中添加一个值。

例如,取上面的值19017519751,并通过37得到除法的剩余部分

19017519751 % 37 -> 11  r

现在有了最后一个字母(记住,编码从单词的开头到结尾,解码从结尾开始(,您需要得到一个没有最后一个字符的值。

通过编码,您将最后一个和乘以37,这在这里也适用,但以相反的方式,您需要一个整数值。只需除以37,取下一个字母的底值。

剩下的看起来是这样的:

513987020 % 37 ->  3  e
13891541 % 37 ->  2  d
375447 % 37 ->  8  n
10147 % 37 ->  9  o
274 % 37 -> 15  w

最后,您需要进行检查以停止迭代,因为此值是编码的第一个值7

最新更新