哀求:设计一个 TinyURL 的加密 encode 和解密 decode 的方法。你的加密和解密算法如何设计和运作是没有限定的,你只须要担保一个URL可以被加密成一个TinyURL,并且这个TinyURL可以用解密方法规复本钱来的URL。
思路:
针对长地址,随机天生一个key,把key和长地址放到map里存起来,后续decode时从map中取对应的key。

key的天生办法:先确定一个多少长度的字母池,然后从字母池里随机挑选多少个字母。字母池的长度和key的长度可以设置的长一些,以便支持更多的地址转换。
如果天生的key之前已经用过,那么重新天生key,直到天生未利用过的key。
代码:
class Solution {public: string generate_key() { char key[7]; key[6]='\0'; for(int i=0; i<6; i++) { key[i] = letters[rand()%62]; } return key; } // Encodes a URL to a shortened URL. string encode(string longUrl) { string key; while(true) { key = generate_key(); if(mp.find(key) == mp.end()) { mp[key] = longUrl; break; } } return "http://tinyurl.com/"+key; } // Decodes a shortened URL to its original URL. string decode(string shortUrl) { string key = shortUrl.substr(19); if(mp.find(key) != mp.end()) return mp[key]; else return ""; }private: unordered_map<string, string> mp; const string letters="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";};