Skip to content

535. TinyURL 的加密与解密

解题过程

INFO

题目链接 TinyURL 是一种 URL 简化服务, 比如:当你输入一个 URL https://leetcode.com/problems/design-tinyurl 时,它将返回一个简化的URL http://tinyurl.com/4e9iAk 。请你设计一个类来加密与解密 TinyURL 。 加密和解密算法如何设计和运作是没有限制的,你只需要保证一个 URL 可以被加密成一个 TinyURL ,并且这个 TinyURL 可以用解密方法恢复成原本的 URL 。 实现 Solution 类: Solution() 初始化 TinyURL 系统对象。 String encode(String longUrl) 返回 longUrl 对应的 TinyURL 。 String decode(String shortUrl) 返回 shortUrl 原本的 URL 。题目数据保证给定的 shortUrl 是由同一个系统对象加密的

javascript
/**
 *
 * @link https://leetcode.cn/problems/encode-and-decode-tinyurl/
 * @title 535. TinyURL 的加密与解密
 * @description TinyURL 是一种 URL 简化服务, 比如:当你输入一个 URL https://leetcode.com/problems/design-tinyurl 时,它将返回一个简化的URL http://tinyurl.com/4e9iAk 。请你设计一个类来加密与解密 TinyURL 。
 * 加密和解密算法如何设计和运作是没有限制的,你只需要保证一个 URL 可以被加密成一个 TinyURL ,并且这个 TinyURL 可以用解密方法恢复成原本的 URL 。
 * 实现 Solution 类:
 * Solution() 初始化 TinyURL 系统对象。
 * String encode(String longUrl) 返回 longUrl 对应的 TinyURL 。
 * String decode(String shortUrl) 返回 shortUrl 原本的 URL 。题目数据保证给定的 shortUrl 是由同一个系统对象加密的
 * Encodes a URL to a shortened URL.
 *
 * @param {string} longUrl
 * @return {string}
 */
// 解法一
// 思路:用window自带的 API,encodeURI/decodeURI,或encodeURIComponent/decodeURIComponent
// 缺点:这样做没有任何意义,变成水题
var encode = function (longUrl) {
  // return encodeURI(longUrl)
  return encodeURIComponent(longUrl)
};

/**
 * Decodes a shortened URL to its original URL.
 *
 * @param {string} shortUrl
 * @return {string}
 */
var decode = function (shortUrl) {
  // return decodeURI(shortUrl)
  return decodeURIComponent(shortUrl)
};

/**
 * Your functions will be called as such:
 * decode(encode(url));
 */

// 解法二
// 思路:使用哈希表存储对应url的key,之后在读取即可
var encode = function (longUrl) {
  this.urlMap = new Map()
  this.key = 0
  this.key++
  this.urlMap.set(this.key, longUrl)
  return 'http://customurl.com/' + this.key
}

var decode = function (shortUrl) {
  const id = shortUrl.split('http://customurl.com/')[1]
  return this.urlMap.get(parseInt(id))
}

const encodeUrl = encode('https://leetcode.com/problems/design-tinyurl')
const decodeUrl = decode(encodeUrl)
console.log(decodeUrl)

解题感受

因为加密解密没有限制,放开后反而觉得有空了,简单可以很简单,难可以做的很难,想到的解法还是用哈希表存储关键 key 来做的简写返回值,然后做读取就好了,跟官方题解有点类似

优质题解