▶ 要求给出一种对 URL 网址进行压缩和解压的算法,例如 https://leetcode.com/problems/design-tinyurl ←→ http://tinyurl.com/4e9iAk,在不允许打表的情况下应该无法压缩的。
● 代码,6 ms,完全不压缩,just for fun
1 class Solution 2 { 3 public: 4 // Encodes a URL to a shortened URL. 5 string encode(string longUrl) { return longUrl; } 6 // Decodes a shortened URL to its original URL. 7 string decode(string shortUrl) { return shortUrl; } 8 };
1 class Solution 2 { 3 public: 4 string theLatestUrl; 5 string encode(string longUrl) { theLatestUrl = longUrl; return "whatever, doesn't matter"; } 6 string decode(string shortUrl) { return theLatestUrl; } 7 };
● 代码,9 ms,随机数打表法,加密之后的字符串只与原网址字符串在表中的存放位置有关,与其内容无关。类似的有各种打表法,需要依赖散列表来解码,时间复杂度 O(1),空间开销大。
1 class Solution 2 { 3 public: 4 unordered_map<string, string> um; 5 string encode(string longUrl) 6 { 7 const string baseUrl = "http://tinyurl.com/"; 8 int r; 9 string ran; 10 srand(1); 11 for (r = rand() % 100000, ran = to_string(r); um.count(baseUrl + ran) == 1; r = rand() % 100000, ran = to_string(r)); 12 // 随机取一个空的位置把网址放进去 13 um[baseUrl + ran] = longUrl; 14 return baseUrl + ran; 15 } 16 string decode(string shortUrl) 17 { 18 if (um.count(shortUrl) == 1) 19 return um[shortUrl]; 20 return ""; 21 } 22 };