您的位置:首页 > 其它

LeetCode 535. Encode and Decode TinyURL对随机编码的思考

2018-03-19 22:04 756 查看
题目: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.
大意:1.要根据系统设计的方式,用Base62的char来encode,还有需要让长URL得到6位的相同url。代码
public class Codec {
HashMap<String,String> hashToUrl=new HashMap<String,String>();
HashMap<String,String> urlToHash=new HashMap<String,String>();
String tinyUrlBase="http://tinyurl.com/";
String characters="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
Random random=new Random();
// Encodes a URL to a shortened URL.
public String encode(String longUrl) {
if(urlToHash.containsKey(longUrl)){
return tinyUrlBase + urlToHash.get(longUrl);
}
StringBuilder hash=new StringBuilder();
do{
for (int i=0; i<6; i++)
hash.append(characters.charAt(random.nextInt(characters.length())));

}while (hashToUrl.containsKey(hash.toString()));
hashToUrl.put(hash.toString(), longUrl);
urlToHash.put(longUrl, hash.toString());
return tinyUrlBase + hash.toString();
}

// Decodes a shortened URL to its original URL.
public String decode(String shortUrl) {
return hashToUrl.get(shortUrl.substring(tinyUrlBase.length()));
}
}

// Your Codec object will be instantiated and called as such:
// Codec codec = new Codec();
// codec.decode(codec.encode(url));


代码参考https://www.cnblogs.com/EdwardLiu/p/6533835.html其实更简单的还可以用动态链表之类的。但是吧,这方面应用还是很广的啊,最常见的微博,微信为了省略冗长的网站URL,自动变成了很短的URL,用random62按照题目要求一一实现映射其实就是这样,保证了每一个URL的唯一性,不会跳错网站,不错的启发。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: