LeetCode 解题思路:535.Encode and Decode TinyURL
2021-06-11 14:05
标签:多次 and algo accept div ensure 进制 order http TinyURL is a URL shortening service where you enter a URL such as Design the 题意就是对url设计编码和解码,使长url变成短url。没有严格限制编解码算法,只要能保证长短url可以互相转换。 基本思路: encode:根据url生成一个序号,将url用vector或unordered_map保存在该序号对应项中,返回string为http://tinyurl.com/+序号 decode:从短网址中拿到序号,从容器中找到对应序号项。 简单的例子:用longUrl在vector中的存储位置做标识 但是和题目给的不一样怎么办?有一个小方案,和解题无关,单纯说一下怎么去设计tinyurl,只有思路没有写代码。 基本思路不变,仍然保存在容器中,或者调用接口写在数据库/redis中。 编码:使用题目 “4e9iAk“ 这样的编码可以认为将URL换成一个 0 ~ 9 + ‘A’ ~‘Z’ + ‘a’ ~ ‘z’ 换成一个5位62进制的数,这样每个url保存一次, 总共可以保存62^5 =916132832 个不同的url,最后一位另有他用; 可以将url用哈希函数(自己写)变成一个整型数(
最后一位默认为0,如果这个位置已经有了一个地址,就偏移62位,如果还被占用,将偏移62*2个依次类推,用最后一位纪录到底偏移了几次; 如果偏移了很多次仍然没找到位置(那得已经保存了很多),判断下当前容器大小是否超过容器一半,如果是就扩容,如果否,就将原哈希值加在url后面再进行一次哈希计算,用新的哈希值保存这条url。 解码:按照编码规则反解成整型数,然后把容器/数据库中网址取出。 还有一个取巧的方法,分享给一些只求过的同学,当然也不是不好,因为题目没有具体的要求,可以accept。 LeetCode 解题思路:535.Encode and Decode TinyURL 标签:多次 and algo accept div ensure 进制 order http 原文地址:http://www.cnblogs.com/hellomotty/p/7291236.htmlhttps://leetcode.com/problems/design-tinyurl
and it returns a short URL such as http://tinyurl.com/4e9iAk
.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. 1 class Solution {
2 public:
3
4 // 编码:长变短
5 string encode(string longUrl) {
6 url.push_back(longUrl);
7 return "http://tinyurl.com/" + to_string(url.size() - 1);
8 }
9
10 // 解码:短变长
11 string decode(string shortUrl) {
12 size_t pos = shortUrl.find_last_of("/");
13 return url[stoi(shortUrl.substr(pos + 1))];
14 }
15 private:
16 vectorstring> url;
17 };
class Solution {
public:
string encode(string longUrl) {
return longUrl;
}
string decode(string shortUrl) {
return shortUrl;
}
};
文章标题:LeetCode 解题思路:535.Encode and Decode TinyURL
文章链接:http://soscw.com/index.php/essay/93613.html