前言

短網(wǎng)址,我想大家應(yīng)該都見(jiàn)過(guò),如果沒(méi)有,試著點(diǎn)擊下面這條鏈接 https://git.io/vSY4o,會(huì)跳到我的 GitHub 主頁(yè),但是它確實(shí)比原始鏈接 https://github.com/hanzichi 要短了一些。關(guān)于短網(wǎng)址的作用,這里不作描述,本文主要講講如何實(shí)現(xiàn)一個(gè)簡(jiǎn)單的短網(wǎng)址系統(tǒng)。

Leetcode 正好 有一題 與此有關(guān),不妨一試。

思路

如果沒(méi)有接觸過(guò)短網(wǎng)址,不妨去 https://goo.gl/ 和 https://git.io/ 稍微體驗(yàn)下。體驗(yàn)的結(jié)果是,短網(wǎng)址都把網(wǎng)址壓縮成了六個(gè)字符,這是巧合嗎?

短網(wǎng)址整個(gè)運(yùn)轉(zhuǎn)邏輯非常簡(jiǎn)單,我們以 https://goo.gl/SfzlA2 為例,當(dāng)我們?cè)L問(wèn)這個(gè)網(wǎng)址的時(shí)候,后端可以獲取 "SfzlA2" 這個(gè)字符串,然后跳轉(zhuǎn)到 https://github.com/hanzichi,很顯然,這個(gè)字符串和這個(gè)地址已經(jīng)綁定,通過(guò)某種映射關(guān)系可以從 "SfzlA2" 獲取完整的地址。

那么,看起來(lái)我們只需要找到一個(gè)算法,能夠?qū)⒁粋€(gè)長(zhǎng)字符串壓縮成一個(gè)短的字符串,并且該算法應(yīng)該是可逆的。但是實(shí)現(xiàn)這樣的文本壓縮算法,是非常困難的(不存在?),如果真有這么一個(gè)算法和逆運(yùn)算,那么基本上現(xiàn)在的壓縮軟件都可以歇菜了,而世界上所有的信息(網(wǎng)址長(zhǎng)度未知),都可以壓縮成固定長(zhǎng)度個(gè)