TinyURL是一种URL简化服务, 比如:当你输入一个URL https://leetcode.com/problems/design-tinyurl 时,它将返回一个简化的URL http://tinyurl.com/4e9iAk.

要求:设计一个 TinyURL 的加密 encode 和解密 decode 的方法。你的加密和解密算法如何设计和运作是没有限制的,你只需要保证一个URL可以被加密成一个TinyURL,并且这个TinyURL可以用解密方法恢复成原本的URL。

Related Topics
  • 哈希表
  • 数学
  • \n
  • 👍 119
  • 👎 0
  • public class LeetCode535Test {
    
        private static String chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    
        private static HashMap<String,String> urlToTiny = new HashMap<>();
        private static HashMap<String,String> tinyToUrl = new HashMap<>();
    
        private static String to62Str(Long num){
            StringBuilder sb = new StringBuilder();
            int remainder = 0;
            int scale = chars.length();
            while (num > scale - 1) {
                remainder = Long.valueOf(num % scale).intValue();
                sb.append(chars.charAt(remainder));
                num = num / scale;
            }
            sb.append(chars.charAt(num.intValue()));
            return  sb.reverse().toString();
        }
    
        // Encodes a URL to a shortened URL.
        public String encode(String longUrl) {
            if (urlToTiny.containsKey(longUrl)){
                return urlToTiny.get(urlToTiny);
            }
            Long nanoTime = System.nanoTime();
            String key = to62Str(nanoTime);
    //        System.out.println(key);
            urlToTiny.put(longUrl,key);
            tinyToUrl.put(key,longUrl);
            return key;
        }
    
        // Decodes a shortened URL to its original URL.
        public String decode(String shortUrl) {
            if (tinyToUrl.containsKey(shortUrl)){
                return tinyToUrl.get(shortUrl);
            }
            return null;
        }
    }

    这题比较简单,简单的Hash映射