トピックリンク:https://leetcode-cn.com/problems/encode-and-decode-tinyurl/description/
問題は、アプリケーションのハッシュテーブルです。
暗号化されたランダムには、この方法では、URLを生成するための暗号化結果の数字と文字のセットを固定長。この方法では、暗号化後の固定長は6です。以前の結果と暗号化の結果は同じでアウト作成する場合は、単に新しい暗号化結果を変更します。
public class Codec {
String alphabet = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
HashMap<String,String> map = new HashMap<>();
Random random = new Random();
String key = getString();
public String getString(){
StringBuilder sb = new StringBuilder();
for(int i = 0;i < 6;i++){
sb.append(alphabet.charAt(random.nextInt(62)));
}
return sb.toString();
}
// Encodes a URL to a shortened URL.
public String encode(String longUrl) {
if(map.containsKey(key)){
key = getString();
}
map.put(key,longUrl);
return "http://tinyurl.com/"+key;
}
// Decodes a shortened URL to its original URL.
public String decode(String shortUrl) {
return map.get(shortUrl.replace("http://tinyurl.com/",""));
}
}
分析は、
URL 1暗号化されてもよい数は、ほぼ(26 * 10 + 2)^ 6レベルは非常に大きいです。
暗号化文字列の数と比較することができます。2.暗号化URL 6で固定長は、偉大な削減の最適化です。
暗号化は同じ結果を生成することはほとんど不可能であるため、3本方式の性能は、非常に良いです。
4.我々はまた、暗号化された文字列の長さを増加させることによって暗号化結果の数を増やすことができます。このように、文字列の長さと数の間、我々はトレードオフを行う必要があり、暗号化文字列を暗号化することができます。
5. URLは、ベースの暗号化の暗号化結果が原因で乱数を使用することで、ほとんど不可能であると予測しました。