華為校招機試題。
題目
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
代碼