码迷,mamicode.com
首页 > Web开发 > 详细

leetcode-535. TinyURL 的加密与解密

时间:2018-08-19 20:34:17      阅读:523      评论:0      收藏:0      [点我收藏+]

标签:返回   dom   imp   cal   div   短字符串   get   turn   限制   

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 的加密与解密

标签:返回   dom   imp   cal   div   短字符串   get   turn   限制   

原文地址:https://www.cnblogs.com/namedlxd/p/9502430.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!