public static void main(String[] args) {
String url = "https://leetcode.com/problems/encode-and-decode-tinyurl/discuss/";
String encode = encode(url);
String decode = decode(encode);
System.out.println(url);
System.out.println(encode);
System.out.println(decode);
}
static Map<String,String> map = new HashMap<>();
static String base = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
// Encodes a URL to a shortened URL.
public static String encode(String longUrl) {
Integer i = longUrl.hashCode();
map.put(base10ToBase62(i.longValue()),longUrl);
return "http://tinyurl.com/"+base10ToBase62(i.longValue());
}
// Decodes a shortened URL to its original URL.
public static String decode(String shortUrl) {
String s = map.get(shortUrl.replaceAll("http://tinyurl.com/",""));
return s;
}
public static String base10ToBase62(Long n) {
StringBuilder sb = new StringBuilder();
while (n != 0) {
Long l = n % 62;
sb.insert(0,base.charAt(l.intValue()));
n /= 62;
}
return sb.toString();
}
public static Long base62ToBase10(String str) {
Long n = 0l;
for (int i = 0; i < str.length(); i++) {
n=n*62+base.indexOf(str.charAt(i));
}
return n;
}
public int convert(char c) {
if (c >= '0' && c <= '9')
return c - '0';
if (c >= 'a' && c <= 'z') {
return c - 'a' + 10;
}
if (c >= 'A' && c <= 'Z') {
return c - 'A' + 36;
}
return -1;
}
网友评论