Validate IP Address,LeetCode,468

LeetCode 上的第 468 题 “Validate IP Address” 要求编写一个函数来验证给定的字符串是否是有效的 IPv4 或 IPv6 地址。IPv4 地址由四个十进制数字组成,每个数字介于 0 到 255 之间,用点(.)分隔。IPv6 地址由八个十六进制数字组成,用冒号(:)分隔。

题目描述

编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址。

示例

示例 1:

输入: "172.16.254.1"

输出: "IPv4"

解释: 这是一个有效的 IPv4 地址, 所以返回 "IPv4"。

示例 2:

输入: "2001:0db8:85a3:0:0:8A2E:0370:7334"

输出: "IPv6"

解释: 这是一个有效的 IPv6 地址, 所以返回 "IPv6"。

示例 3:

输入: "256.256.256.256"

输出: "Neither"

解释: 这不是一个有效的 IPv4 或 IPv6 地址, 所以返回 "Neither"。

解题思路

  1. 判断基础格式
    • 如果字符串包含点(.),则可能是 IPv4 地址。
    • 如果字符串包含冒号(:),则可能是 IPv6 地址。
  2. 验证 IPv4 地址
    • 按点(.)分割字符串,应该得到四个部分。
    • 每个部分必须是介于 0 到 255 之间的十进制数。
    • 每个部分不能有前导零。
  3. 验证 IPv6 地址
    • 按冒号(:)分割字符串,应该得到八个部分。
    • 每个部分必须是 1 到 4 位的十六进制数。

代码实现

以下是 Python 实现的示例代码:

class Solution: def validIPAddress(self, IP: str) -> str: def isIPv4(s): parts = s.split('.') if len(parts) != 4: return False for part in parts: if not part.isdigit() or not 0 <= int(part) <= 255: return False if part != str(int(part)): # 检查是否有前导零 return False return True

    def isIPv6(s):
        parts = s.split(':')
        if len(parts) != 8:
            return False
        for part in parts:
            if len(part) == 0 or len(part) > 4:
                return False
            for char in part:
                if not (char.isdigit() or 'a' <= char.lower() <= 'f'):
                    return False
        return True

    if isIPv4(IP):
        return "IPv4"
    elif isIPv6(IP):
        return "IPv6"
    else:
        return "Neither"

示例使用

sol = Solution() print(sol.validIPAddress("172.16.254.1")) # 输出: "IPv4" print(sol.validIPAddress("2001:0db8:85a3:0:0:8A2E:0370:7334")) # 输出: "IPv6" print(sol.validIPAddress("256.256.256.256")) # 输出: "Neither"

详细解释

  1. isIPv4 函数
    • 使用 split('.') 将字符串按点分割。
    • 检查分割后的部分数量是否为 4。
    • 对每个部分进行以下检查:
      • 是否为数字。
      • 转换为整数后是否在 0 到 255 范围内。
      • 去除前导零后是否与原字符串相同。
  2. isIPv6 函数
    • 使用 split(':') 将字符串按冒号分割。
    • 检查分割后的部分数量是否为 8。
    • 对每个部分进行以下检查:
      • 长度是否在 1 到 4 之间。
      • 每个字符是否为数字或十六进制字符(a-f 或 A-F)。
  3. 主函数 validIPAddress
    • 调用 isIPv4isIPv6 函数进行验证,根据结果返回 “IPv4″、”IPv6” 或 “Neither”。

通过这种方式,可以有效地验证给定的字符串是否是有效的 IP 地址,并返回相应的结果。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注