535. Encode and Decode TinyURL

来源:互联网 发布:网络信息安全漫画 编辑:程序博客网 时间:2024/06/02 01:09

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.

题目的意思就是让你自己设计一个加密解密算法,使得将正常的URL加密之后生成的shortUrl解密之后仍为原来的URL;

思路1:无招胜有招,对于要加密的URL,直接输出其原型;

class Solution {public:    // Encodes a URL to a shortened URL.    string encode(string longUrl) {        return longUrl;    }    // Decodes a shortened URL to its original URL.    string decode(string shortUrl) {        return shortUrl;    }};// Your Solution object will be instantiated and called as such:// Solution solution;// solution.decode(solution.encode(url));

思路2:参考别人的代码,可以生成一个随机的字符串,使得其唯一映射到原URL,并建立map,保存从正常URL到randstr的映射,以及randstr到正常URL的映射即可。

class Solution {private:    unordered_map<string, string> long2short, short2long;    string dict;public:    Solution(){        dict = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";        long2short.clear();        short2long.clear();        srand(time(NULL));    }    // Encodes a URL to a shortened URL.    string encode(string longUrl) {        if (long2short.count(longUrl)){            return "http://tinyurl.com/" + long2short[longUrl];        }        string randstr;        for (int i = 0; i < 6; i++)randstr.push_back(dict[rand() % 62]);        int index = 0;        while (short2long.count(randstr)){            randstr[index] = dict[rand() % 62];            index = (index + 1) % 5;        }        short2long[randstr] = longUrl;        long2short[longUrl] = randstr;        return "http://tinyurl.com/" + randstr;    }    // Decodes a shortened URL to its original URL.    string decode(string shortUrl) {        string randstr = shortUrl.substr(shortUrl.find_last_of("/") + 1);        return short2long.count(randstr) ? short2long[randstr] : shortUrl;    }};
原创粉丝点击