TinyURL 的加密与解密
作者:互联网
题目链接:https://leetcode-cn.com/problems/encode-and-decode-tinyurl/description/
该题是hash表的一种应用。
随机固定长度加密 ,在这种方法中,使用数字和字母表集合来为 URL 生成加密结果。这种方法中,加密后的长度固定是 6 位。如果产生出来的加密结果与之前产生的结果一样,就换一个新的加密结果。
public class Codec {
String alphabet = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
HashMap<String,String> map = new HashMap<>();
Random random = new Random();
String key = getString();
public String getString(){
StringBuilder sb = new StringBuilder();
for(int i = 0;i < 6;i++){
sb.append(alphabet.charAt(random.nextInt(62)));
}
return sb.toString();
}
// Encodes a URL to a shortened URL.
public String encode(String longUrl) {
if(map.containsKey(key)){
key = getString();
}
map.put(key,longUrl);
return "http://tinyurl.com/"+key;
}
// Decodes a shortened URL to its original URL.
public String decode(String shortUrl) {
return map.get(shortUrl.replace("http://tinyurl.com/",""));
}
}
表现分析
1.可加密的 URL 数目非常大,几乎是 (10 + 26*2)^6级别。
2.加密 URL 的长度固定是 6,这相比于能加密的字符串数目是极大的缩减优化。
3.这个方法的表现非常好,因为几乎不可能产生相同加密结果。
4.我们也可以通过增加加密字符串的长度来增加加密结果的数目。因此,在加密字符串的长度和可加密的字符串数目之间我们需要做一个权衡。
5.根据加密 URL 预测加密结果几乎是不可能的,因为使用了随机数。
ITgo 发布了51 篇原创文章 · 获赞 13 · 访问量 3万+ 私信 关注标签:map,加密,String,URL,解密,TinyURL,key,public 来源: https://blog.csdn.net/JSUTDOIT/article/details/104091000