535. Encode and Decode TinyURL
Problem 535
https://leetcode.com/problems/encode-and-decode-tinyurl/
TinyURL is a URL shortening service where you enter a URL such as https://leetcode.com/problems/design-tinyurl
and it returns a short URL such as http://tinyurl.com/4e9iAk
.
Design the encode
and decode
methods for the TinyURL service. There is no restriction on how your encode/decode algorithm should work. You just need to ensure that a URL can be encoded to a tiny URL and the tiny URL can be decoded to the original URL.
Solution
class Codec:
alphabet = string.ascii_letters + '0123456789'
def __init__(self):
self.code2url = {}
self.url2code = {}
def encode(self, longUrl):
"""Encodes a URL to a shortened URL."""
while longUrl not in self.url2code:
code = ''.join(random.choice(Codec.alphabet) for _ in range(5) )
if code not in self.code2url:
self.code2url[ code ] = longUrl
self.url2code[ longUrl ] = code
return "http://tinyurl.com/" + self.url2code[ longUrl ]
def decode(self, shortUrl):
"""Decodes a shortened URL to its original URL."""
return self.code2url[shortUrl[-5:]]
uuid- in python
https://docs.python.org/2/library/uuid.html
uuid.uuid1
([node[, clock_seq]])
從主機當前的 MAC address、時間、隨機數生成
優:保證全球唯一
缺:需要使用 Mac address 有安全性問題,有時會以 IP 來代替 Mac address
Generate a UUID from a host ID, sequence number, and the current time. If node is not given, getnode()
is used to obtain the hardware address. If clock_seq is given, it is used as the sequence number; otherwise a random 14-bit sequence number is chosen.
uuid.uuid3
(namespace, name)
透過輸入的字串(名字)和其空間的 MD5 散列值得到,只有在相同名字相同空間下才會是一樣的
Generate a UUID based on the MD5 hash of a namespace identifier (which is a UUID) and a name (which is a string).
uuid.uuid4
()
隨機生成,其重複機率是有可能的
Generate a random UUID.
uuid.uuid5
(namespace, name)
類似於 uuid3 ,但是是採用 SHA1 算法
Generate a UUID based on the SHA-1 hash of a namespace identifier (which is a UUID) and a name (which is a string).
Last updated