题目描述:
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.
随机生成固定长度的token表示编码后的URL,同时用哈希表存储URL编码和解码对应的结果。
class Solution {
public:
// Encodes a URL to a shortened URL.
string encode(string longUrl) {
if(long_to_short.count(longUrl)) return long_to_short[longUrl];
else
{
string s;
for(int i=0;i<8;i++) s.push_back(chars[rand()%chars.size()]);
if(long_to_short.count(s)>0) return encode(longUrl);
else
{
long_to_short[longUrl]=s;
short_to_long[s]=longUrl;
}
return s;
}
}
// Decodes a shortened URL to its original URL.
string decode(string shortUrl) {
return short_to_long[shortUrl];
}
private:
unordered_map<string,string> short_to_long;
unordered_map<string,string> long_to_short;
string chars="0123456789abcdefghijklmnopqrstuvwxyz";
};