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 预测加密结果几乎是不可能的,因为使用了随机数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值