题目
TinyURL是一种URL简化服务, 比如:当你输入一个URL https://leetcode.com/problems/design-tinyurl 时,它将返回一个简化的URL http://tinyurl.com/4e9iAk.
要求:设计一个 TinyURL 的加密 encode 和解密 decode 的方法。你的加密和解密算法如何设计和运作是没有限制的,你只需要保证一个URL可以被加密成一个TinyURL,并且这个TinyURL可以用解密方法恢复成原本的URL。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/encode-and-decode-tinyurl
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
方法1
Python实现
class Codec:
def encode(self, longUrl: str) -> str:
"""Encodes a URL to a shortened URL.
"""
var=dict()
self.count=0
self.var=dict()
self.var[count]=longUrl
self.count+=1
return (self.count-1)
def decode(self, shortUrl: str) -> str:
"""Decodes a shortened URL to its original URL.
"""
return self.var[count]
Java实现
public class Codec {
Map<Integer, String> map = new HashMap<>();
int id = 0;
// Encodes a URL to a shortened URL.
public String encode(String longUrl) {
id++;
map.put(id, longUrl);
return "http://tinyurl.com/" + id;
}
// Decodes a shortened URL to its original URL.
public String decode(String shortUrl) {
int idx = shortUrl.lastIndexOf('/') + 1;
int key = Integer.parseInt(shortUrl.substring(idx));
return map.get(key);
}
}
方法2
public class Codec {
// 存储原始URL与其对应的TinyURL
HashMap<String, String> url = new HashMap<>();
// Encodes a URL to a shortened URL.
public String encode(String longUrl) {
if (!url.containsKey(longUrl)) {
String tmp = "http://tinyurl.com/" + getRandomString();
url.put(longUrl, tmp);
}
return url.get(longUrl);
}
// Decodes a shortened URL to its original URL.
public String decode(String shortUrl) {
String res = "";
// 查找对应TinyURL的URL
for (String str : url.keySet()) {
if (url.get(str).equals(shortUrl)) {
res = str;
}
}
return res;
}
// 生成8位随机字符串
public static String getRandomString() {
String randomStr = "";
// 随机抽取示例字符串的方式随机
String model = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+-*/.&%$$#@";
for (int j = 0; j < 8; j++) {
// 随机生成model字符串内一位字符
char tmpChar = model.charAt((int) (Math.random() * model.length()));
randomStr = randomStr + tmpChar;
}
return randomStr;
}
}
// Your Codec object will be instantiated and called as such:
// Codec codec = new Codec();
// codec.decode(codec.encode(url));