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);
*/