leetcode-535. TinyURL 的加密与解密

Posted namedlxd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode-535. TinyURL 的加密与解密相关的知识,希望对你有一定的参考价值。

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")))

 

以上是关于leetcode-535. TinyURL 的加密与解密的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 535: Encode and Decode TinyURL

leetcode535 - Encode and Decode TinyURL - medium

[LeetCode] 535. Encode and Decode TinyURL 编码和解码短URL

力扣——TinyURL的加密与解密

每日一题535. TinyURL 的加密与解密

数据结构与算法之深入解析“TinyURL加密与解密”的求解思路与算法示例