• 入门力扣自学笔记77 C++ (题目编号535)


    535. TinyURL 的加密与解密

    题目:

    TinyURL 是一种 URL 简化服务, 比如:当你输入一个 URL https://leetcode.com/problems/design-tinyurl 时,它将返回一个简化的URL http://tinyurl.com/4e9iAk 。请你设计一个类来加密与解密 TinyURL 。

    加密和解密算法如何设计和运作是没有限制的,你只需要保证一个 URL 可以被加密成一个 TinyURL ,并且这个 TinyURL 可以用解密方法恢复成原本的 URL 。

    实现 Solution 类:

    Solution() 初始化 TinyURL 系统对象。
    String encode(String longUrl) 返回 longUrl 对应的 TinyURL 。
    String decode(String shortUrl) 返回 shortUrl 原本的 URL 。题目数据保证给定的 shortUrl 是由同一个系统对象加密的。


    示例:

    输入:url = "https://leetcode.com/problems/design-tinyurl"
    输出:"https://leetcode.com/problems/design-tinyurl"

    解释:
    Solution obj = new Solution();
    string tiny = obj.encode(url); // 返回加密后得到的 TinyURL 。
    string ans = obj.decode(tiny); // 返回解密后得到的原本的 URL 。


    提示:

    1 <= url.length <= 104
    题目数据保证 url 是一个有效的 URL


    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/encode-and-decode-tinyurl
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


    思路:

    1,转化为N进制,N最好是质数,这样能尽量保证hash分布均匀,这里选的11
    2,利用unsigned long long存储结果,可以自然溢出,防止出现越界bug


    代码:

    1. class Solution {
    2. public:
    3. // Encodes a URL to a shortened URL.
    4. using ull = unsigned long long;
    5. const ull base = 11;
    6. const string code = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    7. const ull len = code.size();
    8. unordered_map<string, string> m;
    9. ull hashcode(const string& s) {
    10. ull hash = 0;
    11. for (auto c : s) {
    12. hash *= base;
    13. hash += c;
    14. }
    15. return hash;
    16. }
    17. string ULLToString(ull n) {
    18. string s;
    19. while (n != 0) {
    20. s += code[n % len];
    21. n /= len;
    22. }
    23. return s;
    24. }
    25. string encode(string longUrl) {
    26. string shortUrl = ULLToString(hashcode(longUrl));
    27. m[shortUrl] = longUrl;
    28. return shortUrl;
    29. }
    30. // Decodes a shortened URL to its original URL.
    31. string decode(string shortUrl) {
    32. return m[shortUrl];
    33. }
    34. };
    35. // Your Solution object will be instantiated and called as such:
    36. // Solution solution;
    37. // solution.decode(solution.encode(url));

  • 相关阅读:
    Multi-Modal Attention Network Learning for Semantic Source Code Retrieval 解读
    基于Laravel通用型内容建站企业官网系统源码 可免费商用
    经验分享|如何有效地进行审稿意见回复
    where 1=1 是什么意思
    go语言与c语言调用的方法
    VMware虚拟机 Centos7 配置静态IP和DNS
    如何实现区块构建者角色的去中心化?
    瑞芯微rk1126 平台部分jpeg图片解码程序挂掉的问题
    大数据仓库flink1.13.2的ODS层存储代码示例
    PHP7的新特性
  • 原文地址:https://blog.csdn.net/DK_Sorhic/article/details/125516665