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.
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.
My approach:
import java.util.HashMap;
import java.util.Random;
import java.lang.StringBuilder;
public class Codec {
//HashMap to store the longUrl and the randomly generated string
HashMap<String,String> urlMap = new HashMap<>();
// Encodes a URL to a shortened URL.
public String encode(String longUrl) {
Random rand = new Random();
int urlLen = 6;
char [] shortURL = new char[urlLen];
String randChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
for(int i = 0; i < urlLen; i++ )
shortURL[i] = randChars.charAt(rand.nextInt(randChars.length()));
StringBuilder sb = new StringBuilder("http://tinyurl.com/");
sb.append(new String(shortURL));
System.out.println(sb);
urlMap.put(sb.toString(),longUrl);
return sb.toString();
}
// Decodes a shortened URL to its original URL.
public String decode(String shortUrl) {
return urlMap.get(shortUrl);
}
}
// Your Codec object will be instantiated and called as such:
// Codec codec = new Codec();
// codec.decode(codec.encode(url));
With regards to the above code, I have the following questions:
- Is there a better approach to do this question?
- Can I decrease the number of lines or variables used in the program?
- Can I improve the space and time complexity of the program?