leetcode 535. TinyURL 的加密与解密
问题描述: TinyURL是一种URL简化服务, 比如:当你输入一个URL https://leetcode.com/problems/design-tinyurl
时,它将返回一个简化的URL http://tinyurl.com/4e9iAk
.
要求:设计一个 TinyURL 的加密 encode
和解密 decode
的方法。你的加密和解密算法如何设计和运作是没有限制的,你只需要保证一个URL可以被加密成一个TinyURL,并且这个TinyURL可以用解密方法恢复成原本的URL。
思路: 需要保证生成的字符是唯一的。
let direction="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
const urlMap=new Map();
function randomStr(num){
let nums=num%62;
return direction[nums]
}
function random_str(n){
let s='';
for(let i=0;i<n;i++){
s+=randomStr(parseInt(Math.random()*62))//保证62个字符随机生成的概率一样
}
return s
}
/**
* Encodes a URL to a shortened URL.
*
* @param {string} longUrl
* @return {string}
*/
var encode = function(longUrl) {
let s='';
do{
s=random_str(5)
}while(urlMap.has(s))
urlMap.set(s,longUrl);
return s;
};
/**
* Decodes a shortened URL to its original URL.
*
* @param {string} shortUrl
* @return {string}
*/
var decode = function(shortUrl) {
return urlMap.get(shortUrl)
};