zoukankan      html  css  js  c++  java
  • Leetcode: Encode and Decode TinyURL

    Note: This is a companion problem to the System Design problem: Design TinyURL.
    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.
    
    Subscribe to see which companies asked this question.

    1. 根据系统设计的Estimation of the amount of data we need to store for the next couple of years, 我们应需要6位Base62的char来encode

    2. assume 避免地址爆炸,相同的longUrl得到相同的shortUrl, 这需要一个额外的hashMap longToShort

    3. 这里因为我们想保证都是6位的shortURL,所以采用random generate的方法;其他方法还可以是编号等等

     1 public class Codec {
     2     HashMap<String, String> hashToUrl = new HashMap<String, String>();
     3     HashMap<String, String> urlToHash = new HashMap<String, String>();
     4     String tinyUrlBase = "http://tinyurl.com/";
     5     String characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
     6     Random random = new Random();
     7 
     8     // Encodes a URL to a shortened URL.
     9     public String encode(String longUrl) {
    10         if (urlToHash.containsKey(longUrl))
    11             return tinyUrlBase + urlToHash.get(longUrl);
    12             
    13         StringBuilder hash = new StringBuilder();
    14         do {
    15             for (int i=0; i<6; i++) {
    16                 hash.append(characters.charAt(random.nextInt(characters.length())));
    17             }
    18         } while (hashToUrl.containsKey(hash.toString()));
    19         
    20         hashToUrl.put(hash.toString(), longUrl);
    21         urlToHash.put(longUrl, hash.toString());
    22         return tinyUrlBase + hash.toString();
    23     }
    24 
    25     // Decodes a shortened URL to its original URL.
    26     public String decode(String shortUrl) {
    27         return hashToUrl.get(shortUrl.substring(tinyUrlBase.length()));
    28     }
    29 }
    30 
    31 // Your Codec object will be instantiated and called as such:
    32 // Codec codec = new Codec();
    33 // codec.decode(codec.encode(url));
  • 相关阅读:
    bzoj2588 Count on a tree
    poco对象生成的几种方式根据你使用不同的ui决定
    airtest本地连接和远程连接
    python音频文件中pcm格式提取
    python提取视频中的音频
    如何理解快速排序的时间复杂度是O(nlogn)
    剑指 Offer 45. 把数组排成最小的数
    剑指 Offer 44. 数字序列中某一位的数字
    剑指 Offer 43. 1~n 整数中 1 出现的次数
    剑指 Offer 41. 数据流中的中位数
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/6533835.html
Copyright © 2011-2022 走看看