专栏首页眯眯眼猫头鹰的小树杈leetcode535. Encode and Decode TinyURL

leetcode535. Encode and Decode TinyURL

题目要求

Note: This is a companion problem to the System Design problem:Design TinyURL-System/).

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.

要求将长URL转化为短URL,即通过长URL可以生成短URL,短URL也可以找到长URL。

思路和代码

通过Map结构就可以实现,只需要将长URL和短URL之间的映射分别进行存储即可。

private Map<String, String> longToShortUrl = new HashMap<>();  
private Map<String, String> shortToLongUrl = new HashMap<>();  
  
private static final String SHORT\_URL\_PREFIX \= "http://tinyurl.com/";  
  
private static final String AVAILABLE_CHARACTERS = "1234567890qwertyuiopasdfghjklzxcvbnm";  
  
private Random random = new Random();  
// Encodes a URL to a shortened URL.  
public String encode(String longUrl) {  
    if (longToShortUrl.containsKey(longUrl)) {  
        return SHORT_URL_PREFIX + longToShortUrl.get(longUrl);  
    }  
    String result;  
    do{  
        result = getRandomShortUrl(6);  
    } while (shortToLongUrl.containsKey(result));  
    longToShortUrl.put(longUrl, result);  
    shortToLongUrl.put(result, longUrl);  
    return SHORT_URL_PREFIX + result;  
}  
  
// Decodes a shortened URL to its original URL.  
public String decode(String shortUrl) {  
    String shortRandomCharacters = shortUrl.replace(SHORT_URL_PREFIX, "");  
    return shortToLongUrl.get(shortRandomCharacters);  
}  
  
private String getRandomShortUrl(int length) {  
    StringBuilder sb = new StringBuilder();  
    while (length-- > 0) {  
        int randomIndex = (int)(Math.random() * AVAILABLE_CHARACTERS.length());  
        sb.append(AVAILABLE_CHARACTERS.charAt(randomIndex));  
    }  
    return sb.toString();  
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • leetcode445. Add Two Numbers II

    链表形式跟非链表形式的最大区别在于我们无法根据下标来访问对应下标的元素。假如我们希望从后往前对每个位置求和,则必须每次都从前往后访问到对应下标的值才可以。因此这...

    眯眯眼的猫头鹰
  • vue-cli的项目结构

    这篇文章对纯新手友好,所以有过任何vue开发经验的人可以出门左转啦!这篇文章献给我的homie苏蕾儿童鞋,让她在学习vue项目的时候少走一点弯路(径直冲向末路哈...

    眯眯眼的猫头鹰
  • 跨域问题的一次深入研究

    最近在业务代码中深受跨域问题困扰,因此特别写一篇博客来记录一下自己对跨域的理解以及使用到的参考资料。本文的项目背景基于vue+vuex+axios+spring...

    眯眯眼的猫头鹰
  • nodejs之重定向

    重定向指的是通过各种方法将各种网络请求重新定个方向转到其它位置(如:网页重定向、域名的重定向、路由选择的变化也是对数据报文经由路径的一种重定向)。

    OECOM
  • SonarQube检测出的bug、漏洞以及异味的修复整理

    上面的这种bug在项目中很常见,参数都用new Object[]{}封装起来。特别是从class文件反编译回来成的java文件格式也是这样的。但是如果要消除...

    chenchenchen
  • 小程序反编译windows辅助脚本

    https://github.com/xuedingmiaojun/wxappUnpacker

    薛定喵君
  • 13行代码实现爬取豆瓣250电影榜单

    原理很简单,通过发送resquest请求获取服务器的response,再使用xpath提取其中我们需要的数据,然后保存到文件中。

    py3study
  • 【春节特辑】神奇的二进制

    有 1000 个一模一样的瓶子,其中有 999 瓶是普通的水,有 1 瓶是毒药。任何喝下毒药的生物都会在一星期之后死亡。现在,你只有 10 只小白鼠和一星期的时...

    五分钟学算法
  • 【图像分类】 图像分类中的对抗攻击是怎么回事?

    欢迎大家来到图像分类专栏,深度学习分类模型虽然性能强大,但是也常常会因为受到小的干扰而性能崩溃,对抗攻击就是专门研究如何提高网络模型鲁棒性的方法,本文简要介绍相...

    用户1508658
  • 前端开发该如何看待新技术

    做前端开发时间久了,都会有一个基本的困惑,就是有那么多的新技术新框架,到底该如何取舍。每每一个框架还没玩熟,另一个新的又取代了它,总是感到有心无力。

    姬小光

扫码关注云+社区

领取腾讯云代金券