题目:
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的唯一性,不会跳错网站,不错的启发。