TinyURL是一种URL简化服务, 比如:当你输入一个URL https://leetcode.com/problems/design-tinyurl
时,它将返回一个简化的URL http://tinyurl.com/4e9iAk
.
要求:设计一个 TinyURL 的加密 encode
和解密 decode
的方法。你的加密和解密算法如何设计和运作是没有限制的,你只需要保证一个URL可以被加密成一个TinyURL,并且这个TinyURL可以用解密方法恢复成原本的URL。
思路:
首先读懂题意,从更高层次看,我们要做的是将长url(长字符串)映射为短url(短字符串)。
首先想到的可能是找到某种映射关系,将长url映射为短url,但难度有点大。
换一种思考的方式,我们对每个长url随机生成没有映射长url的短字符串,并记录下长短url之间映射关系,然后在解码的时候去查表即可。
代码:
import random class Codec: def __init__(self): self.code = ‘0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ‘ self.long_to_short = {} self.short_to_long = {} def encode(self, longUrl): """Encodes a URL to a shortened URL. :type longUrl: str :rtype: str """ if longUrl in self.long_to_short.keys(): return self.long_to_short.get(longUrl) else: encode = self.encodeUrl() while encode in self.short_to_long.keys(): encode = self.encodeUrl() self.long_to_short[longUrl] = encode self.short_to_long[encode] = longUrl return encode def decode(self, shortUrl): """Decodes a shortened URL to its original URL. :type shortUrl: str :rtype: str """ return self.short_to_long.get(shortUrl) if shortUrl in self.short_to_long.keys() else ‘‘ # Your Codec object will be instantiated and called as such: # codec = Codec() # codec.decode(codec.encode(url)) def encodeUrl(self): return ‘‘.join([random.choice(self.code) for _ in range(6)]) if __name__ == ‘__main__‘: codec = Codec() print(codec.decode(codec.encode("https://leetcode.com/problems/design-tinyurl")))
原文地址:https://www.cnblogs.com/namedlxd/p/9502430.html
时间: 2024-11-08 23:46:10