[路飞]_js算法:leetcode 535-TinyURL 的加密与解密

79 阅读1分钟

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)
};