【Leetcode】535. Encode and Decode TinyURL
阿新 • • 發佈:2021-02-05
技術標籤:LC 棧、佇列、串及其他資料結構java字串leetcode演算法
題目地址:
https://leetcode.com/problems/encode-and-decode-tinyurl/
要求設計一個短網址系統。給定一個網址,要將其加密為一個短網址;給定短網址,也要能解密回來。
對於每個長網址,可以產生一個較短的隨機字串與之對應,然後將對應關係存入雜湊表中。程式碼如下:
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class Codec {
private Map<String, String> map = new HashMap<>();
private String s = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
private Random random = new Random();
// Encodes a URL to a shortened URL.
public String encode(String longUrl) {
while (true ) {
String str = getRandomStr(6);
if (!map.containsKey(str)) {
map.put(str, longUrl);
return "http://tinyurl.com/" + str;
}
}
}
// Decodes a shortened URL to its original URL.
public String decode (String shortUrl) {
return map.get(shortUrl.substring(19));
}
// 返回一個長k的隨機字串
private String getRandomStr(int k) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < k; i++) {
sb.append(s.charAt(random.nextInt(s.length())));
}
return sb.toString();
}
}
每次操作時間複雜度 O ( 1 ) O(1) O(1),空間取決於總加密次數。