持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第30天,点击查看活动详情
一、题目描述:
TinyURL 是一种 URL 简化服务, 比如:当你输入一个 URL leetcode.com/problems/de… 时,它将返回一个简化的URL 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 = "leetcode.com/problems/de…" 输出:"leetcode.com/problems/de…"
解释: Solution obj = new Solution(); string tiny = obj.encode(url); // 返回加密后得到的 TinyURL 。 string ans = obj.decode(tiny); // 返回解密后得到的原本的 URL 。
提示:
1 <= url.length <= 104 题目数据保证 url 是一个有效的 URL
来源:力扣(LeetCode)
链接:leetcode.cn/problems/en…
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。\
二、思路分析:
实际生产中应当是存储在持久化存储中,建立长短url的映射关系 短url生成的方式选择也有很多种,直接哈希或者自行实现一个字符串压缩之类的算法,
- 通过 hashCode 找到字符串加密地址
- 把这个值和原串放入映射表,形成 加密串->原串 的映射关系
- 解密时通过加密串找到原串映射,并返回
三、AC 代码:
public class Codec {
Map<String,String> link = new HashMap<>();
// Encodes a URL to a shortened URL.
public String encode(String longUrl) {
long code = longUrl.hashCode();
String s = "http://a.com/"+code;
link.put(s,longUrl);
return s;
}
// Decodes a shortened URL to its original URL.
public String decode(String shortUrl) {
return link.get(shortUrl);
}
}
// Your Codec object will be instantiated and called as such:
// Codec codec = new Codec();
// codec.decode(codec.encode(url));
四、总结:
掘友们,解题不易,留下个赞或评论再走吧!谢啦~ 💐
希望对你有帮助,期待您找到心意的工作和满意的offer
期待下次再见~
🌇 点赞 👍 收藏 ⭐留言 📝 一键三连 ~关注Jam,从你我做起!