news 2026/5/1 8:09:21

验证IP地址(四)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
验证IP地址(四)

方法二:分治法

思想

IPv4 和 IPv6 地址均是由特定的分界符隔开的字符串组成,并且每个子字符串具有相同格式。

因此,可以将地址分为多个块,然后逐块进行验证。

仅当每个块都有效时,该地址才有效。这种方法称为分治法

算法

  • 对于 IPv4 地址,通过界定符 . 将地址分为四块;对于 IPv6 地址,通过界定符 : 将地址分为八块。
  • 对于 IPv4 地址的每一块,检查它们是否在 0 - 255 内,且没有前置零。
  • 对于 IPv6 地址的每一块,检查其长度是否为 1 - 4 位的十六进制数。

Python 实现

class Solution: def validate_IPv4(self, IP: str) -> str: nums = IP.split('.') for x in nums: # Validate integer in range (0, 255): # 1. length of chunk is between 1 and 3 if len(x) == 0 or len(x) > 3: return "Neither" # 2. no extra leading zeros # 3. only digits are allowed # 4. less than 255 if x[0] == '0' and len(x) != 1 or not x.isdigit() or int(x) > 255: return "Neither" return "IPv4" def validate_IPv6(self, IP: str) -> str: nums = IP.split(':') hexdigits = '0123456789abcdefABCDEF' for x in nums: # Validate hexadecimal in range (0, 2**16): # 1. at least one and not more than 4 hexdigits in one chunk # 2. only hexdigits are allowed: 0-9, a-f, A-F if len(x) == 0 or len(x) > 4 or not all(c in hexdigits for c in x): return "Neither" return "IPv6" def validIPAddress(self, IP: str) -> str: if IP.count('.') == 3: return self.validate_IPv4(IP) elif IP.count(':') == 7: return self.validate_IPv6(IP) else: return "Neither"

Java 实现

class Solution { public String validateIPv4(String IP) { String[] nums = IP.split("\\.", -1); for (String x : nums) { // Validate integer in range (0, 255): // 1. length of chunk is between 1 and 3 if (x.length() == 0 || x.length() > 3) return "Neither"; // 2. no extra leading zeros if (x.charAt(0) == '0' && x.length() != 1) return "Neither"; // 3. only digits are allowed for (char ch : x.toCharArray()) { if (! Character.isDigit(ch)) return "Neither"; } // 4. less than 255 if (Integer.parseInt(x) > 255) return "Neither"; } return "IPv4"; } public String validateIPv6(String IP) { String[] nums = IP.split(":", -1); String hexdigits = "0123456789abcdefABCDEF"; for (String x : nums) { // Validate hexadecimal in range (0, 2**16): // 1. at least one and not more than 4 hexdigits in one chunk if (x.length() == 0 || x.length() > 4) return "Neither"; // 2. only hexdigits are allowed: 0-9, a-f, A-F for (Character ch : x.toCharArray()) { if (hexdigits.indexOf(ch) == -1) return "Neither"; } } return "IPv6"; } public String validIPAddress(String IP) { if (IP.chars().filter(ch -> ch == '.').count() == 3) { return validateIPv4(IP); } else if (IP.chars().filter(ch -> ch == ':').count() == 7) { return validateIPv6(IP); } else return "Neither"; } }

复杂度分析

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 6:08:19

揭秘ComfyUI_SLK_joy_caption_two:AI图像字幕生成新利器

揭秘ComfyUI_SLK_joy_caption_two:AI图像字幕生成新利器 【免费下载链接】ComfyUI_SLK_joy_caption_two ComfyUI Node 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI_SLK_joy_caption_two 想为图片自动生成精准字幕?ComfyUI_SLK_joy_capt…

作者头像 李华
网站建设 2026/4/30 6:40:56

突破创作瓶颈:OpenUtau智能音乐合成解决方案全解析

还在为虚拟歌手制作的高门槛而苦恼?开源音乐合成平台OpenUtau为你提供了零基础也能掌握的创作方案。这款完全免费的跨平台工具重新定义了音乐制作流程,让每个人都能轻松创作属于自己的虚拟歌手作品。 【免费下载链接】OpenUtau Open singing synthesis p…

作者头像 李华
网站建设 2026/4/18 10:41:27

20、Kubernetes性能、扩展性与网络:全面解析

Kubernetes性能、扩展性与网络:全面解析 1. 衡量Kubernetes的性能和扩展性 要提升Kubernetes的性能和扩展性,我们首先要明确提升的方向以及如何衡量这些提升。同时,在追求性能和扩展性提升的过程中,不能违背Kubernetes的基本属性和保证。实际上,性能的提升往往能免费带来…

作者头像 李华
网站建设 2026/4/24 3:14:11

KISS FFT终极指南:3分钟快速上手的轻量级信号处理神器

KISS FFT终极指南:3分钟快速上手的轻量级信号处理神器 【免费下载链接】old-kissfft [DEPRECATED MIRROR] You want https://github.com/mborgerding/kissfft! 项目地址: https://gitcode.com/gh_mirrors/ol/old-kissfft 想要在嵌入式设备上运行FFT&#xff…

作者头像 李华
网站建设 2026/5/1 7:18:53

3、深入理解Kubernetes:架构、模式、API及运行时

深入理解Kubernetes:架构、模式、API及运行时 1. Kubernetes设计模式 1.1 Sidecar模式 Sidecar模式是在一个Pod中除了主应用容器外,再放置一个辅助容器。主应用容器并不知道Sidecar容器的存在,只专注于自身业务。例如,使用中央日志代理,主容器只需将日志输出到标准输出…

作者头像 李华
网站建设 2026/4/18 17:16:49

25、嵌入式Linux实时性能优化与U-boot命令详解

嵌入式Linux实时性能优化与U-boot命令详解 1. 嵌入式Linux实时性能问题 在许多应用场景中,传统主线内核的改进虽然显著,但仍无法实现确定性的实时性能。默认调度器虽优秀,但追求“公平性”,且块I/O系统会为提高吞吐量对I/O请求进行重新排序和合并,这对于真正有实时需求的…

作者头像 李华