Leetcode刷题记录:编码并解码短网址-阿里云开发者社区

开发者社区> 大江小浪> 正文

Leetcode刷题记录:编码并解码短网址

简介: 题目要求 编写一个类,提供两个方法。一个可以将普通的网址编码成短网址,一个可以将短网址还原为普通网址。 参考题解 # 使用随机函数,生成短网址,保存在dict中,避免重复 import random import math import re class Codec: charbase =...
+关注继续查看

题目要求

编写一个类,提供两个方法。一个可以将普通的网址编码成短网址,一个可以将短网址还原为普通网址。

参考题解

# 使用随机函数,生成短网址,保存在dict中,避免重复
import random
import math
import re

class Codec:
    charbase = [x for x in "0123456789abcdefghijklmnopqrstuvwxyz"] 
    urldict = {}
    longurldict = {}

    def get_random_char(self, length):
        random_char = ""
        #print(len(self.charbase))

        for x in range(6):
            random_char += self.charbase[math.ceil(random.random() * len(self.charbase) ) - 1 ]

        return random_char

    def encode(self, longUrl):
        if longUrl in self.longurldict:
            return self.longurldict[longUrl]

        url_code = self.get_random_char(6)
        if url_code in self.urldict:
            self.encode(longUrl)
        else:
            self.longurldict[longUrl] = url_code
            self.urldict[url_code] = longUrl

        return "http://tinyurl.com/" + url_code

    def decode(self, shortUrl):
        domain = "http://tinyurl.com/"
        shortUrl = shortUrl.replace(domain, "")

        if shortUrl in self.urldict:
            return self.urldict[shortUrl]
        else:
            return false

url = "https://leetcode.com/problems/design-tinyurl";
codec = Codec()
print(codec.get_random_char(6))
print(codec.get_random_char(6))
print(codec.get_random_char(6))
print(codec.get_random_char(6))
print(codec.get_random_char(6))

print(codec.encode(url))
print(codec.decode(codec.encode(url)))

我这个过程遇到一个坑,本地环境是Python3,math.ceil函数返回了整型数,Leetcode是Python2的环境,所以返回了浮点数,需要做一下类型转换。看了一下其他解题方法,其实可以直接用 hash 函数,不用考虑那么多。

本文为作者原创,如果您觉得本文对您有帮助,请随意打赏,您的支持将鼓励我继续创作。

img_5aa33392af8827039c3ea963be129769.png

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
8766 0
新型可扩展的数据保护方式——擦除编码
一、概述   在之前存储系统中,一般都采用RAID技术来对数据进行保护,一旦阵列中某块硬盘损坏,可通过RAID技术所形成的镜像来对丢失数据进行恢复。但随着海量数据问题的出现,RAID越来越难发挥其作用。
1116 0
(DirectX系列08)DirectShow WavDest编码分析
     在DirectShow 中有很多Samples,WavDest就是其中一个,这个Fliter主要用于将采集到的视频流写入到指定的文件,文件格式是.WAV。
825 0
违反并发性: UpdateCommand影响了预期 1 条记录中的 0 条 解决办法
本文转载:http://www.cnblogs.com/litianfei/archive/2007/08/16/858866.html UpdateCommand和DeleteCommand出现DBConcurrencyException异常。
1112 0
记录并显示网页的最后修改时间
document.write("最后更新时间: " + document.lastModified + "")
465 0
浅析RLP-以太坊的数据编码方式
### 概述 RLP(RecursiveLength Prefix)是以太坊中序列化数据的编码方式。 既然是编码方式,下面结合代码详细看看RLP的奥秘: 官方定义: * RLP encoding is defined as follows: * For a single byte whose value is in the [0x00, 0x7f] range, th
2088 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
10589 0
使用git迁移git项目并保留提交记录
场景 在平时开发中我们有自己的git仓库,组内提交都是在这个库。突然有一天,领导说要把这个库整合到另一个更大的工程中(华为云的看板),那里面有前后端的代码;为了方便大家查找,我们需要将各个组的代码迁移到同一个大工程下。
9763 0
+关注
大江小浪
平心静气,破浪劈坚!
292
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载