535. TinyURL 的加密与解密

535. TinyURL 的加密与解密

TinyURL是一种URL简化服务, 比如:当你输入一个URL https://leetcode.com/problems/design-tinyurl 时,它将返回一个简化的URL http://tinyurl.com/4e9iAk.

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

代码如下:

class Codec {
    static $url_dics = [];
    /**
    * Encodes a URL to a shortened URL.
    * @param String $longUrl
    * @return String
    */
    function encode($longUrl) {
        $ukey = $this->from10to62(rand(100, 999).time());
        $this->url_dics[$ukey] = $longUrl;
        return 'http://tinyurl.com/'.$ukey;
    }

    /**
    * Decodes a shortened URL to its original URL.
    * @param String $shortUrl
    * @return String
    */
    function decode($shortUrl) {
        return $this->url_dics[str_replace("http://tinyurl.com/", "", $shortUrl)];
    }

    function from10to62($num)
    {
        $to = 62;
        $dict = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $ret = '';
        do {
            $ret = $dict[bcmod($num, $to)] . $ret;
            $num = bcdiv($num, $to);
        } while ($num > 0);
        return $ret;
    }
}

/**
 * Your Codec object will be instantiated and called as such:
 * $obj = Codec();
 * $s = $obj->encode($longUrl);
 * $ans = $obj->decode($s);
 */

本文链接:https://itarvin.com/detail-106.aspx

登录或者注册以便发表评论

登录

注册