友情支持

如果您觉得这个笔记对您有所帮助,看在D瓜哥码这么多字的辛苦上,请友情支持一下,D瓜哥感激不尽,😜

支付宝

微信

有些打赏的朋友希望可以加个好友,欢迎关注D 瓜哥的微信公众号,这样就可以通过公众号的回复直接给我发信息。

wx jikerizhi

公众号的微信号是: jikerizhi因为众所周知的原因,有时图片加载不出来。 如果图片加载不出来可以直接通过搜索微信号来查找我的公众号。

535. TinyURL 的加密与解密

TinyURL 是一种 URL 简化服务, 比如:当你输入一个 URL https://leetcode.com/problems/design-tinyurl 时,它将返回一个简化的URL http://tinyurl.com/4e9iAk。请你设计一个类来加密与解密 TinyURL 。

加密和解密算法如何设计和运作是没有限制的,你只需要保证一个 URL 可以被加密成一个 TinyURL ,并且这个 TinyURL 可以用解密方法恢复成原本的 URL 。

实现 Solution 类:

  • Solution() 初始化 TinyURL 系统对象。

  • String encode(String longUrl) 返回 longUrl 对应的 TinyURL 。

  • String decode(String shortUrl) 返回 shortUrl 原本的 URL。题目数据保证给定的 shortUrl 是由同一个系统对象加密的。

示例:

输入:url = "https://leetcode.com/problems/design-tinyurl"
输出:"https://leetcode.com/problems/design-tinyurl"

解释:
Solution obj = new Solution();
string tiny = obj.encode(url); // 返回加密后得到的 TinyURL 。
string ans = obj.decode(tiny); // 返回解密后得到的原本的 URL 。

提示:

  • 1 <= url.length <= 104

  • 题目数据保证 url 是一个有效的 URL

思路分析

简单的哈希映射!如果不考虑去重,代码还可以再简化一点。

  • 一刷

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/**
 * @author D瓜哥 · https://www.diguage.com
 * @since 2026-03-02 20:30:20
 */
public class Codec {
  private String base = "http://tinyurl.com/";
  private Map<String, Integer> l2s = new HashMap<>();
  private Map<Integer, String> s2l = new HashMap<>();
  int counter = 0;

  // Encodes a URL to a shortened URL.
  public String encode(String longUrl) {
    if (!l2s.containsKey(longUrl)) {
      int value = counter++;
      l2s.put(longUrl, value);
      s2l.put(value, longUrl);
    }
    return base + l2s.get(longUrl);
  }

  // Decodes a shortened URL to its original URL.
  public String decode(String shortUrl) {
    int index = shortUrl.lastIndexOf('/') + 1;
    int value = Integer.parseInt(shortUrl.substring(index));
    return s2l.get(value);
  }
}

参考资料