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.
题目链接:https://leetcode.com/problems/encode-and-decode-tinyurl/#/description
题目分析:按长度最短字典序递增的方式构造TinyURL
击败77.5%
public class Codec {
HashMap<String, String> dec = new HashMap<>();
HashMap<String, String> enc = new HashMap<>();
public String getNext(String cur) {
String code = enc.get(cur);
if (code == null) {
return "0";
}
int len = code.length();
char ch = code.charAt(len - 1);
String ans = "";
if (ch == '9') {
ans = code.substring(0, len - 1) + 'Z';
}
else if (ch == 'Z') {
ans = code.substring(0, len - 1) + 'z';
}
else if (ch == 'z') {
ans = code + '0';
} else {
ans = code.substring(0, len - 2) + (code.charAt(len - 1) + 1);
}
return ans;
}
// Encodes a URL to a shortened URL.
public String encode(String longUrl) {
String shortUrl = getNext(longUrl);
enc.put(longUrl, shortUrl);
dec.put(shortUrl, longUrl);
return shortUrl;
}
// Decodes a shortened URL to its original URL.
public String decode(String shortUrl) {
return dec.get(shortUrl);
}
}
// Your Codec object will be instantiated and called as such:
// Codec codec = new Codec();
// codec.decode(codec.encode(url));