题目要求
Note: This is a companion problem to the System Design problem:Design TinyURL-System/).
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.
要求将长URL转化为短URL,即通过长URL可以生成短URL,短URL也可以找到长URL。
思路和代码
通过Map结构就可以实现,只需要将长URL和短URL之间的映射分别进行存储即可。
private Map<String, String> longToShortUrl = new HashMap<>();
private Map<String, String> shortToLongUrl = new HashMap<>();
private static final String SHORT\_URL\_PREFIX \= "http://tinyurl.com/";
private static final String AVAILABLE_CHARACTERS = "1234567890qwertyuiopasdfghjklzxcvbnm";
private Random random = new Random();
// Encodes a URL to a shortened URL.
public String encode(String longUrl) {
if (longToShortUrl.containsKey(longUrl)) {
return SHORT_URL_PREFIX + longToShortUrl.get(longUrl);
}
String result;
do{
result = getRandomShortUrl(6);
} while (shortToLongUrl.containsKey(result));
longToShortUrl.put(longUrl, result);
shortToLongUrl.put(result, longUrl);
return SHORT_URL_PREFIX + result;
}
// Decodes a shortened URL to its original URL.
public String decode(String shortUrl) {
String shortRandomCharacters = shortUrl.replace(SHORT_URL_PREFIX, "");
return shortToLongUrl.get(shortRandomCharacters);
}
private String getRandomShortUrl(int length) {
StringBuilder sb = new StringBuilder();
while (length-- > 0) {
int randomIndex = (int)(Math.random() * AVAILABLE_CHARACTERS.length());
sb.append(AVAILABLE_CHARACTERS.charAt(randomIndex));
}
return sb.toString();
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。