不管全世界所有人怎么说,我都认为自己的感受才是正确的。无论别人怎么看,我绝不打乱自己的节奏。喜欢的事自然可以坚持,不喜欢的怎么也长久不了。
LeetCode:原题地址
题目要求
TinyURL是一种URL简化服务, 比如:当你输入一个URL leetcode.com/problems/de… 时,它将返回一个简化的URL tinyurl.com/4e9iAk.
要求:设计一个 TinyURL 的加密 encode 和解密 decode 的方法。你的加密和解密算法如何设计和运作是没有限制的,你只需要保证一个URL可以被加密成一个TinyURL,并且这个TinyURL可以用解密方法恢复成原本的URL。
思路
- 参考了题解,每一个url生成一个6位的随机数作为key值存储在哈希表里,然后把这个随机数作为后缀放入返回的简化url
- 拿到简化url后提取出后6位随机数,去哈希表找到对应的长url即可
/**
* Encodes a URL to a shortened URL.
*
* @param {string} longUrl
* @return {string}
*/
let map={};
let str="1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
function getRandom(str){
let res="";
for(let i=0;i<6;i++){
res+=str[Math.floor(Math.random()*61)];
}
return res;
}
var encode = function(longUrl) {
let result=getRandom(str);
while(map[result]){
result=getRandom(str)
}
map[result]=longUrl;
return "http://tinyurl.com/"+result;
};
/**
* Decodes a shortened URL to its original URL.
*
* @param {string} shortUrl
* @return {string}
*/
var decode = function(shortUrl) {
let key=shortUrl.slice(-6);
return map[key];
};
/**
* Your functions will be called as such:
* decode(encode(url));
*/