Custom URL

自定义短链接时,首先应该先查询customTable看是否有匹配对,有直接返回,没有或只有key和value中一个则返回error,最后再建立新的链接,另外因为长短查询都有需求,这里必须建立四个dict分别记录对应关系

import random

class TinyUrl2:

    customShortToLong = {}
    customLongToShort = {}
    generatorShortToLongTable = {}
    generatorLongToShortTable = {}
    charList = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
    prefix = 'http://tiny.url/'
    # @param long_url a long url
    # @param a short key
    # @return a short url starts with http://tiny.url/
    def createCustom(self, long_url, short_key):
        # Write your code here
        if long_url in self.customLongToShort and self.prefix + short_key in self.customShortToLong:
            return self.prefix + short_key if self.customLongToShort[long_url] == self.prefix + short_key else 'error'
        if long_url in self.customLongToShort:
            return 'error'
        if long_url in self.generatorLongToShortTable:
            return 'error'
        if self.prefix + short_key in self.customShortToLong:
            return 'error'
        if self.prefix + short_key in self.generatorShortToLongTable:
            return 'error'

        self.customShortToLong[self.prefix + short_key] = long_url
        self.customLongToShort[long_url] = self.prefix + short_key
        return self.prefix + short_key

    # @param {string} long_url a long url
    # @return {string} a short url starts with http://tiny.url/
    def longToShort(self, long_url):
        # Write your code here
        if long_url in self.customLongToShort:
            return self.customLongToShort[long_url]
        if long_url in self.generatorLongToShortTable:
            return self.generatorLongToShortTable[long_url]

        shortUrl = ''
        for i in xrange(6):
            shortUrl += random.choice(self.charList)
        self.generatorShortToLongTable[self.prefix + shortUrl] = long_url
        self.generatorLongToShortTable[long_url] = self.prefix + shortUrl
        return self.prefix + shortUrl

    # @param {string} short_url a short url starts with http://tiny.url/
    # @return {string} a long url
    def shortToLong(self, short_url):
        # Write your code here
        if short_url in self.customShortToLong:
            return self.customShortToLong[short_url]
        return self.generatorShortToLongTable[short_url]

results matching ""

    No results matching ""