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 来做的简写返回值,然后做读取就好了,跟官方题解有点类似