如何编写返回字符串的哈希函数?

问题描述

我一直在尝试解决关于 Codewars 的 URL Shortener 问题,但我一直无法通过测试用例。我的解决方案超时了。我找不到返回字符串的快速有效的散列方法。我发现的大多数算法在对字符串进行哈希处理后都返回一个整数。缩短的 URL 应仅包含小写字母。

我的解决方案

const map = new Map();
const longToShortURL = new Map();
let url = 'short.ly/';
    
const urlShortener = (longURL) => {
    if (longToShortURL.has(longURL)) return url + longToShortURL.get(longURL);
    
    const letters = 'abcdefghijklmnopqrstuvwxyz';
    let key = getKey(letters);
    while (map.has(key)) {
        key = getKey(letters);
    }
    
    map.set(key,longURL);
    longToShortURL.set(longURL,key);
    return url + key;
};
const getRandomInt = (max) => {
    return Math.floor(Math.random() * Math.floor(max));
};
    
const getKey = (letters) => {
    let key = '';
    for (let i = 0; i < 4; i++) {
        key += letters.charAt(getRandomInt(letters.length));
    }
    return key;
};

const urlRedirector = (shortURL) => {
    const key = shortURL.split(url)[1];
    return map.get(key);
};

结果

Passed: 2 Failed: 0 Exit Code: 1
Test Results:
Should pass all of these
Testing two different URLs
Testing same URLs
Completed in 1ms
Strict tests
STDERR
Execution Timed Out (12000 ms)

为什么我的代码超时了?

我们的服务器配置为只允许一定的时间来执行您的代码。在极少数情况下,服务器可能承担了太多工作,根本无法足够有效地运行您的代码。大多数情况下,这个问题是由低效的算法引起的。如果您多次看到此错误,您应该尝试进一步优化您的代码。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)