0%

『LeetCode』468 验证IP地址

题目

468. 验证IP地址

给定一个字符串 queryIP。如果是有效的 IPv4 地址,返回 "IPv4" ;如果是有效的 IPv6 地址,返回 "IPv6" ;如果不是上述类型的 IP 地址,返回 "Neither"

有效的IPv4地址“x1.x2.x3.x4” 形式的IP地址。 其中 0 <= x^{i} <= 255x^{i} 不能包含 前导零。例如: “192.168.1.1”“192.168.1.0” 为有效IPv4地址, “192.168.01.1” 为无效IPv4地址; “192.168.1.00”“192.168@1.1” 为无效IPv4地址。

一个有效的IPv6地址 是一个格式为“x1:x2:x3:x4:x5:x6:x7:x8” 的IP地址,其中:

  • \(1 <= x^{i}.length <= 4\)
  • \(x^{i}\) 是一个 十六进制字符串 ,可以包含数字、小写英文字母( 'a''f' )和大写英文字母( 'A''F' )。
  • x^{i} 中允许前导零。

例如 "2001:0db8:85a3:0000:0000:8a2e:0370:7334""2001:db8:85a3:0:0:8A2E:0370:7334" 是有效的 IPv6 地址,而 "2001:0db8:85a3::8A2E:037j:7334""02001:0db8:85a3:0000:0000:8a2e:0370:7334" 是无效的 IPv6 地址。

示例 1:

输入:queryIP = "172.16.254.1"
输出:"IPv4"
解释:有效的 IPv4 地址,返回 "IPv4"

示例 2:

输入:queryIP = "2001:0db8:85a3:0:0:8A2E:0370:7334"
输出:"IPv6"
解释:有效的 IPv6 地址,返回 "IPv6"

示例 3:

输入:queryIP = "256.256.256.256"
输出:"Neither"
解释:既不是 IPv4 地址,又不是 IPv6 地址

提示:

  • queryIP 仅由英文字母,数字,字符 '.'':' 组成。

相似题目


题解

【验证IP地址】模拟

模拟

IPv4. 分割,IPv6: 分割,将字符串分割后再逐项校验是否符合要求即可。

个人踩坑的测试用例:

1
"00.0.0.0"

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# Code language: Python
class Solution:
def validIPAddress(self, queryIP: str) -> str:
s = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'A', 'b', 'B', 'c', 'C', 'd', 'D', 'e', 'E', 'f', 'F'}
def checkIPV4(IP: List[str]):
if len(IP) != 4:
return False
for p in IP:
if not p.isdigit() or not 0 <= int(p) <= 255 or (int(p) > 0 and p.startswith('0')) or (int(p) == 0 and len(p) > 1):
return False
return True

def checkIPV6(IP: List[str]):
if len(IP) != 8:
return False
for p in IP:
if not all(i in s for i in p) or not 1 <= len(p) <= 4:
return False
return True

if checkIPV4(queryIP.split(".")):
return "IPv4"
elif checkIPV6(queryIP.split(":")):
return "IPv6"
return "Neither"

没什么特别意义的题目,主要还是考察细心和检查边界状况,就不罗列其他语言代码了,其实是懒 &#x1F923

  • 时间复杂度: \(O(C)\), \(C\) 为 32 即 IPv6 地址的长度
  • 空间复杂度: \(O(C)\)

最后

如果对你有帮助的话,请给我点个赞吧~

欢迎前往我的博客Github 查看更多题解

--- ♥ end ♥ ---

欢迎关注我呀~