LeetCode Encode and Decode TinyURL
先贴上题目:
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。题目中例子是:
https://leetcode.com/problems/design-tinyurl —编码—http://tinyurl.com/4e9iAk
http://tinyurl.com/4e9iAk – 解码—https://leetcode.com/problems/design-tinyurl
而在要求中并没有对编码和解码的算法有限制,所以还有有比较多解法的。第一个思路采用List集合,编码过程是:将原来的URL放入集合中,然后返回其在List集合中的下标(需要转化为String类型);解码过程是:此时传入该URL返回的下标(需要转化为Int类型),然后通过下标取出List中的原URL。具体代码如下:
public static String encode(String longUrl){
urls.add(longUrl);
return String.valueOf(urls.size()-1);
}
public static String decode(String shortUrl){
int index = Integer.valueOf(shortUrl);
return urls.get(index);
}
第二种思路是利用HashMap,将size和原url放入map中,形成键值对。解码时根据键去值,即可得到原来的url。具体实现代码如下:
public class Codec {
private static Map<String,String> hashmap = new HashMap<String,String>();
// Encodes a URL to a shortened URL.
public String encode(String longUrl) {
hashmap.put(String.valueOf(hashmap.size()+1), longUrl);
return String.valueOf(hashmap.size());
}
// Decodes a shortened URL to its original URL.
public String decode(String shortUrl) {
return hashmap.get(shortUrl);
}
}