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來encodeapp

2. assume 避免地址爆炸,相同的longUrl獲得相同的shortUrl, 這須要一個額外的hashMap longToShortdom

3. 這裏由於咱們想保證都是6位的shortURL,因此採用random generate的方法;其餘方法還能夠是編號等等ui

 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));
相關文章
相關標籤/搜索