来自北大算法课的Leetcode题解:468. 验证IP地址

该博客介绍了一个Python解决方案,用于验证输入的IP地址字符串是有效的IPv4还是IPv6地址。代码通过定义两个辅助函数isIPv4和isIPv6,分别检查IPv4和IPv6的规则,如IPv4不允许前导0,IPv6的每个部分由数字或十六进制字符组成。如果输入匹配任一规则,返回相应的IP类型,否则返回'Neither'。

代码仓库Github | Leetcode solutions @doubleZ0108 from Peking University.

  • 解法1(T99% S69%):按照题干要求写if就可以了。首先通过split()将字符串进行划分,然后根据IPv4和IPv6的规则写if把不满足条件的剔除即可。要注意的IPv4不能有前导0,但可以某一位就是0。提示:可以通过isnumeric()判断字符串是否为数字。
class Solution(object):
    def validIPAddress(self, queryIP):
        """
        :type queryIP: str
        :rtype: str
        """
        def isIPv4(ip):
            parts = ip.split('.')
            if len(parts) != 4: return False
            for part in parts:
                if len(part)==0 or not part[0].isnumeric() or not part.isnumeric() or \
                   int(part) > 255: return False
                if len(part)>1 and part[0]=='0': return False
            return True

        def isIPv6(ip):
            parts = ip.split(':')
            if len(parts) != 8: return False
            for part in parts:
                if len(part) < 1 or len(part) > 4: return False
                for c in part:
                    if c.isnumeric() or (c>='a' and c<='f') or (c>='A' and c <='F'): continue
                    return False
            return True

        if isIPv4(queryIP): return "IPv4"
        elif isIPv6(queryIP): return "IPv6"
        else: return "Neither"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

doubleZ0108

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值