题目

题目来源:力扣(LeetCode

TinyURL是一种URL简化服务, 比如:当你输入一个URL https://leetcode.com/problems/design-tinyurl 时,它将返回一个简化的URL http://tinyurl.com/4e9iAk.
要求:设计一个 TinyURL 的加密 encode 和解密 decode 的方法。你的加密和解密算法如何设计和运作是没有限制的,你只需要保证一个URL可以被加密成一个TinyURL,并且这个TinyURL可以用解密方法恢复成原本的URL。

思路分析

  1. 给了一个网址,让最后输出一个短网址;这个叫加密。给了一个短网址,让最后输出它原始网 址,这个叫解密。
  2. 将这个长URL随机生成长度为LEN的62进制(0-9a-ZA-Z)字符串表示短URL。如果用过了就跳过继续生成,知道发现没用过的key为止
  3. 将这个生成的6位的随机数作为key值存储在哈希表里,然后把这个随机数作为后缀放入返回的简化 url
  4. 拿到简化url后提取出后6位随机数,去哈希表找到对应的长url即可
  1. let map={};
  2. let str="1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  3. function getRandom(str) {
  4. let res = "";
  5. for (let i = 0; i < 6; i++) {
  6. res += str[Math.floor(Math.random() * 61)];
  7. }
  8. return res;
  9. }
  10. /**
  11. * Encodes a URL to a shortened URL.
  12. *
  13. * @param {string} longUrl
  14. * @return {string}
  15. */
  16. var encode = function(longUrl) {
  17. let result = getRandom(str);
  18. while(map[result]) {
  19. result = getRandom(str);
  20. }
  21. map[result] = longUrl;
  22. return "http://tinyurl.com/"+result;
  23. };
  24. /**
  25. * Decodes a shortened URL to its original URL.
  26. *
  27. * @param {string} shortUrl
  28. * @return {string}
  29. */
  30. var decode = function(shortUrl) {
  31. let key = shortUrl.slice(-6);
  32. return map[key];
  33. };
  34. /**
  35. * Your functions will be called as such:
  36. * decode(encode(url));
  37. */