大家好,我是 @负雪明烛。点击右上方的「+关注」↗,优质题解不间断!
题目大意
验证一个字符串是有效的 IP 地址吗?
有效的 IP 地址分为 IPv4 和 IPv6 两种。
具体规则,可以见题目所述。
解题方法
字符串处理
可以定义两个函数,一个判断字符串是否为 IPv4 地址,另一个函数判断是否字符串是否为 IPv6 地址。
对于字符串处理的问题,我一般使用 Python 来做, 因为 Python 处理字符串非常简单。
判断 IPv4 的时候,把字符串按照 "."
分割,判断分割后是不是有 $4$ 部分,每一部分的取值应该在 之间,并且没有前导 $’’0”$。
判断 IPv6 的时候,把字符串按照 ":"
分割,判断分割后是不是有 部分;每一部分的长度应该是 $4$,并且应该是有效的 $16$ 进制的字符串,即在
"0123456789abcdefABCDEF"
之中;且允许前导 $0$。
代码
直接看 Python 代码。
class Solution(object):
def validIPAddress(self, IP):
if '.' in IP and self.checkIPv4(IP):
return "IPv4"
elif ':' in IP and self.checkIPv6(IP):
return "IPv6"
else:
return "Neither"
def checkIPv4(self, IP):
numbers = IP.split('.')
if len(numbers) != 4: return False
for num in numbers:
if not num or (not num.isdecimal()) or (num[0] == '0' and len(num) != 1) or int(num) > 255:
return False
return True
def checkIPv6(self, IP):
valid16 = "0123456789abcdefABCDEF"
if "::" in IP: return False
numbers = IP.split(':')
if len(numbers) != 8: return False
for num in numbers:
if not num: return False
if len(num) >= 5: return False
for n in num:
if n not in valid16:
return False
return True
复杂度
- 水题,不多说。
我是 @负雪明烛 ,刷算法题 1000 多道,写了 1000 多篇算法题解,收获阅读量 300 万。
关注我,你将不会错过我的精彩动画题解、面试题分享、组队刷题活动,进入主页 @负雪明烛 右侧有刷题组织,从此刷题不再孤单。
- 在刷题的时候,如果你不知道该怎么刷题,可以看 LeetCode 应该怎么刷?
- 如果你觉得题目太多,想在短时间内快速提高,可以看 LeetCode 最经典的 100 道题。
- 送你一份刷题的代码模板:【LeetCode】代码模板,刷题必会
- 我写的 1000 道 LeetCode 题解,都在这里了,免费拿走。