1. 程式人生 > 其它 >【Leetcode】535. Encode and Decode TinyURL

【Leetcode】535. Encode and Decode TinyURL

技術標籤: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),空間取決於總加密次數。