基于以下哈希方法编写哈希方法

问题描述 投票:1回答:1

第一次发布一个问题,对我来说很裸露。

因此,相当一段时间以前,我经历了一次面试过程,陷入了一个技术问题。解决的问题在下面给出了hash方法,并编写了相应的unhash方法。

    static Int64 hashThis (String s)
    {
        Int64 h = 7;
        String letters = "acdegiklmnoprsuw";

        for (Int32 i = 0; i < s.Length; i++)
        {
            h = (h * 37 + letters.IndexOf(s[i]));
        }

        return h;
    }

到目前为止,我失败的进展是:

static String unhashThis(Int64 integer)
    {
        Int64 h = 7;
        String letters = "acdegiklmnoprsuw";
        String unhashed = "";

        // as long as h < than integer passed in
        // this is so we iterate the correct number of times
        for (Int32 i = 0; h < integer; i++)
        {
            h = (h * 37 + letters.IndexOf(letters[i]));
            Int64 rem = h % 7;
            Int64 rem2 = 7 % h;
            //unhashed += letters[(int)h];
            //if (h > letters.Length)
            //{
            //    // loop through the letters to find the character
            //    for (int j = 0; j < h; j++)
            //    {
            //        if (j == letters.Length)
            //        {
            //            j = 0;
            //        }
            //        else
            //        {
            //            unhashed += letters[j];
            //        }
            //    }
            //}
        }

        return unhashed;

仅重申一下,我正在重新审视这个问题,因为我正努力提高解决问题的能力,以便在以后的采访中做得更好。

非常感谢。

c# .net hash
1个回答
0
投票

这有效:

static String unHashThis(Int64 hash)
{
    String letters = "acdegiklmnoprsuw";
    String phrase = "";
    while (hash >= 7 * 37)
    {
        int i = (int)(hash % 37);
        phrase = letters[i]+phrase;
        hash = (hash - hash % 37) / 37;
    }

    return phrase;
}
© www.soinside.com 2019 - 2024. All rights reserved.