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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值