题目
题目来源:力扣(LeetCode
TinyURL是一种URL简化服务, 比如:当你输入一个URL https://leetcode.com/problems/design-tinyurl 时,它将返回一个简化的URL http://tinyurl.com/4e9iAk.
要求:设计一个 TinyURL 的加密 encode 和解密 decode 的方法。你的加密和解密算法如何设计和运作是没有限制的,你只需要保证一个URL可以被加密成一个TinyURL,并且这个TinyURL可以用解密方法恢复成原本的URL。
思路分析
- 给了一个网址,让最后输出一个短网址;这个叫加密。给了一个短网址,让最后输出它原始网 址,这个叫解密。
- 将这个长URL随机生成长度为LEN的62进制(0-9a-ZA-Z)字符串表示短URL。如果用过了就跳过继续生成,知道发现没用过的key为止
- 将这个生成的6位的随机数作为key值存储在哈希表里,然后把这个随机数作为后缀放入返回的简化 url
- 拿到简化url后提取出后6位随机数,去哈希表找到对应的长url即可
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;}/*** Encodes a URL to a shortened URL.** @param {string} longUrl* @return {string}*/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));*/
