• 535. Encode and Decode TinyURL(rand and srand)


    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.

    Approach #1: C++.

    class Solution {
    public:
    
        // Encodes a URL to a shortened URL.
        string encode(string longUrl) {
            if (longToTiny.count(longUrl)) return baseUrl + longToTiny[longUrl];
            string tinyString = "";
            do {
                for (int i = 0; i < 6; ++i) {
                    //srand((unsigned)time(0));
                    int index = rand() % characters.length();
                    tinyString += characters[index];
                }    
            } while (longToTiny.count(tinyString));
            
            longToTiny[longUrl] = tinyString;
            tinyToLong[baseUrl+tinyString] = longUrl;
            
            return baseUrl + tinyString;
        }
    
        // Decodes a shortened URL to its original URL.
        string decode(string shortUrl) {
            return tinyToLong[shortUrl];
        }
        
    private:
        string baseUrl = "http://www.leetcode.com/";
        string characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
        unordered_map<string, string> longToTiny;
        unordered_map<string, string> tinyToLong;
    };
    
    // Your Solution object will be instantiated and called as such:
    // Solution solution;
    // solution.decode(solution.encode(url));
    

      

    Approach #2: Python.

    class Codec:
        alphabet = string.ascii_letters + '0123456789'
        
        def __init__(self):
            self.url2code = {}
            self.code2url = {}
    
        def encode(self, longUrl):
            """Encodes a URL to a shortened URL.
            
            :type longUrl: str
            :rtype: str
            """
            while longUrl not in self.url2code:
                code = ''.join(random.choice(Codec.alphabet) for _ in range(6))
                if code not in self.code2url:
                    self.code2url[code] = longUrl
                    self.url2code[longUrl] = code
            return 'http://tinyurl.com/' + self.url2code[longUrl]
            
    
        def decode(self, shortUrl):
            """Decodes a shortened URL to its original URL.
            
            :type shortUrl: str
            :rtype: str
            """
            return self.code2url[shortUrl[-6:]]
            
    
    # Your Codec object will be instantiated and called as such:
    # codec = Codec()
    # codec.decode(codec.encode(url))
    

      

    Time SubmittedStatusRuntimeLanguage
    a few seconds ago Accepted 28 ms python
    2 minutes ago Accepted 36 ms python
    13 minutes ago Accepted 8 ms cpp
    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    cookie 当天12点 过期
    ps 前端常用技巧
    定时器遇到的坑
    ajax 会遇到的问题总结
    立即执行函数表达式 项目经常用到js 代码Module模式
    Hello world
    div position:fixed后,水平居中的问题
    关于div中图片水平垂直居中的问题
    [学习]Activiti流程引擎 入门(1) 初步认识
    SSO框架介绍前篇
  • 原文地址:https://www.cnblogs.com/h-hkai/p/9982455.html
Copyright © 2020-2023  润新知