天天看點

華為機試題: IPv6位址壓縮

華為校招機試題。

題目

IPv6 的位址格式如下:

XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX的格式,它是128位的,用":"分成8段,每段包含4個X是一個16進制數(0-9,A-F),全部大寫,如下就是一個IPv6位址:

IPv6位址一般較長,IPv6提供了一些規則來壓縮位址,規則如下:

-規則1:丢棄前導零。

-規則2:如果兩個或者多個塊包含連續零,則省略它們,并用::替換。連續的零塊隻能被::替換一次,優先優化左側的。如果位址中仍有零塊,它們可以縮小到一個零。

補充規則

以下内容是IPv6的規則,原題中表述不清楚

②雙冒号隻能使用一次,是以我們壓縮最長的全0組

比如:2001:0db8:0000:0000:1:0000:0000:0000

我們壓縮為2001:db8:0:0:1::,而非2001:db8::1:0:0:0

③雙冒号隻能隻用一次,是以我們在我們遇到位址中多個連續全0組長度相同時,我們壓縮最前面的一個。

2001:0db8:0000:0000:ffff:0000:0000:1

壓縮為2001:db8::ffff:0:0:1,而非2001:db8:0:0:ffff::1

測試用例

輸入 2001:0000:3238:DFE1:0063:0000:0000:FEFB

輸出 2001:0:3238:DFE1:63::FEFB

輸入 0000:0000:0000:0000:0000:0000:0000:0000

輸出 ::

輸入 0000:0000:0000:0000:0000:0000:0000:0001

輸出 ::1

輸入 FF01:0000:0000:0000:0000:0000:0000:1101

輸出 FF01::1101

輸入 2001:0DB8:0000:0023:0008:0800:200C:417A

輸出 2001:DB8:0:23:8:800:200C:417A

輸入 2001:0db8:0000:0000:0001:0000:0000:0000

輸出 2001:DB8:0:0:1::

輸入 2001:0db8:0000:0000:ffff:0000:0000:0001

輸出 2001:DB8::FFFF:0:0:1

代碼