当前位置: 首页 > news >正文

验证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"; } }

复杂度分析

http://www.cnnetsun.cn/news/102949.html

相关文章:

  • 16、Kubernetes存储与有状态应用运行指南
  • 19、Kubernetes资源配额、集群容量管理与性能优化
  • 21、高级 Kubernetes 网络技术全解析
  • FastAPI多环境部署终极指南:3步告别配置地狱
  • DAIR-V2X车路协同实战手册:从数据到决策的全链路解密
  • EmotiVoice语音温度调节概念引入,冷暖随心
  • Rainmeter官网中文版下载和安装教程(附安装包,超级详细)
  • EmotiVoice语音合成抗噪能力测试:嘈杂环境中仍清晰可辨
  • 邦邦汽服携手吉利循环产业中心解锁汽车后市场绿色循环新路径
  • 浅谈:算法中的斐波那契数(四)
  • 一项基于粒子图像测速(PIV)速度场反演的压力场重构技术
  • HarmonyOS 教学实战(三):列表分页、下拉刷新与性能优化(让列表真正“丝滑”)
  • 智能刷课神器AutoUnipus:3步解放你的网课时间,100%正确率太惊艳![特殊字符]
  • NetBox拓扑视图插件:让网络管理更直观的5个实用技巧
  • EmotiVoice在教育领域的应用探索:让电子教材‘开口讲课’
  • Blender建筑生成插件building_tools:3步创建专业建筑模型
  • 梅豆角矮砧密植:水肥一体化系统的铺设要点
  • GPT-5.2正式发布!国内首发“喂饭级”使用教程
  • Caddy:把 HTTPS 变成默认选项的现代 Web 服务器
  • Q-learning 算法 —— 无模型(model-free)强化学习
  • 如何避免过拟合?EmotiVoice在小样本下的鲁棒性设计
  • JavaScript 动态网页开发核心问题及实现页面动态更新方法
  • Python中append()方法的使用、原理及效率解析
  • 评管理信息系统教材:过时问题、理论实践结合及专业适配性
  • 生产执行系统怎么选?2025年制造业高性价比MES系统推荐
  • MuJoCo逆向运动学实战:从理论到人形机器人运动重定向的完整指南
  • 降aigc提示词排名:10大工具+高效推荐
  • Obsidian Linter完整使用指南:让你的笔记格式统一专业
  • 理工科标题规范:8大平台+工具示例排名
  • 揭秘Vanna:用自然语言解锁数据库查询的AI黑科技