题目链接: https://leetcode-cn.com/problems/validate-ip-address

难度:中等

通过率:19.4%

题目描述:

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

IPv4 地址由十进制数和点来表示,每个地址包含4个十进制数,其范围为 0 - 255, 用(".")分割。比如,172.16.254.1

同时,IPv4 地址内的数不会以 0 开头。比如,地址 172.16.254.01 是不合法的。

IPv6 地址由8组16进制的数字来表示,每组表示 16 比特。这些组数字通过 (":")分割。比如, 2001:0db8:85a3:0000:0000:8a2e:0370:7334 是一个有效的地址。而且,我们可以加入一些以 0 开头的数字,字母可以使用大写,也可以是小写。所以, 2001:db8:85a3:0:0:8A2E:0370:7334 也是一个有效的 IPv6 address地址 (即,忽略 0 开头,忽略大小写)。

然而,我们不能因为某个组的值为 0,而使用一个空的组,以至于出现 (::) 的情况。 比如, 2001:0db8:85a3::8A2E:0370:7334 是无效的 IPv6 地址。

同时,在 IPv6 地址中,多余的 0 也是不被允许的。比如, 02001:0db8:85a3:0000:0000:8a2e:0370:7334 是无效的。

说明: 你可以认为给定的字符串里没有空格或者其他特殊字符。

示例:

示例 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 地址。

思路:

思路一:按条件模拟即可

思路二:使用int函数转化,来自lee215

思路三:正则,来自提交区

代码:

思路一:

class Solution:def validIPAddress(self, IP: str) -> str:if "." in IP:# ipv4ipv4 = IP.split(".")if len(ipv4) != 4:return "Neither"for num in ipv4:if (len(num) > 1 and num[0] == "0") or not num.isdigit() or (int(num) < 0) or (int(num) > 255):return "Neither"return "IPv4"else:ipv6 = IP.split(":")if len(ipv6) != 8:return "Neither"for num in ipv6:if not num or len(num) > 4 or not all(map(lambda x: x.lower() in "0123456789abcdef", num)):print(num)return "Neither"return "IPv6"

思路二:

class Solution:def validIPAddress(self, IP: str) -> str:def isIPv4(s):try: return str(int(s)) == s and 0 <= int(s) <= 255except: return Falsedef isIPv6(s):if len(s) > 4: return Falsetry: return int(s, 16) >= 0 and s[0] != '-'except: return Falseif IP.count(".") == 3 and all(isIPv4(i) for i in IP.split(".")): return "IPv4"if IP.count(":") == 7 and all(isIPv6(i) for i in IP.split(":")): return "IPv6"return "Neither"

思路三:

import reclass Solution:chunk_IPv4 = r'([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'patten_IPv4 = re.compile(r'^(' + chunk_IPv4 + r'.){3}' + chunk_IPv4 + r'$')chunk_IPv6 = r'([0-9a-fA-F]{1,4})'patten_IPv6 = re.compile(r'^(' + chunk_IPv6 + r':){7}' + chunk_IPv6 + r'$')def validIPAddress(self, IP: str) -> str:        if self.patten_IPv4.match(IP):return "IPv4"return "IPv6" if self.patten_IPv6.match(IP) else "Neither"

python 编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址_[LeetCode] 468. 验证IP地址相关推荐

  1. python 编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址_Python编程常用技巧,你知道几个?...

    现在Python是个炙手可热的技能,很多人都想着入手学学Python编程,甚至包括一些知名人士,比如知名地产商潘石屹就开始学Python.关于Python编程的内容在网络上也非常多,本文虫虫给大家总结 ...

  2. python 编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址_产品 | 工信部发声IPv6即将部署,你的路由需要更换吗?...

    提到说话算数不得不表扬一下工信部,从最早的"提速降费"到现在的"携号转网",每一件事情都办的有条不紊,件件落实到咱们老百姓的生活上. 最近两年工信部都在忙一件大 ...

  3. Python -- 定义一个函数,判断输入的数是不是质数

    Python – 定义一个函数,判断输入的数是不是质数 质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数,否则称为合数. #定义一个函数,判断该数是不是质数 def sum(n): ...

  4. 【指针编程】 编写一个函数,利用指针在字符串s中的指定位置pos处(这里插入的位置是从1开始,不是下标。)插入字符串。插入的位置和内容是从键盘输入

    [问题描述] 编写一个函数,利用指针在字符串s中的指定位置pos处(这里插入的位置是从1开始,不是下标)插入字符串.插入的位置和内容是从键盘输入 要求:子函数 void InsertStr(char ...

  5. C语言编程>第十一周 ⑤ 请编写一个函数,用来删除字符串中的所有空格。

    例题:请编写一个函数,用来删除字符串中的所有空格. 例如,输入we l come,则输出为welcome. 请勿改动主函数main与其它函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句. ...

  6. 用python编写代码,判断用户输入的字符串是否是回文。

    用python编写代码,判断用户输入的字符串是否是回文. s=input("请输入字符串:") b=int(len(s)) flag=True for i in range(b): ...

  7. python编写一个函数、输入n为偶数时_编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+..-吾爱编程网...

    今天吾爱编程为大家分享一个C语言的经典案例编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n, 当输入n为奇数时,调用函数 1/1+1/3+...+1/n的程序写法,有需要的小伙伴 ...

  8. python编写一个程序、输入一个数判断其是偶数还是奇数_编写一个程序,判断用户输入的整数是偶数还是奇数。 (7.0分)_学小易找答案...

    [其它]已知info=[1,2,3,4,5],请通过两种编程方法,将列表变成info=[5,4,3,2,1] (6.0分) [其它]阅读下面的程序,分析代码是否可以编译通过,如果能编译通过,请列出运行 ...

  9. C语言试题四十一之请编写一个函数,用来删除字符串中的所有空格。

    1. 题目 请编写一个函数function,它的功能是:用来删除字符串中的所有空格. 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔试.机试.研究生复试中C程序设计科目.帮助C语言学者打好程 ...

  10. python编写一个函数判断一个数是否为素数是则返回yes_编写函数,判断一个整数是否为素数,并编写主程序调用该函数。_学小易找答案...

    [多选题]下列哪些情形中的外国人可以在中国申请专利? [简答题]为什么应尽量从列表的尾部进行元素的增加与删除操作? [简答题]编写程序,用户输入一个列表和 2 个整数作为下标,然后输出列表中介于 2 ...

最新文章

  1. Linux内核的namespace机制分析
  2. VTK:AnatomicalOrientation解剖定位用法实战
  3. 【Qt】MainWindow窗口状态栏
  4. STM8学习笔记---点亮LED灯
  5. ddbs mysql_ddbs简介
  6. win7下装ubuntu双系统
  7. git中clone出来项目,导入到eclipse并运行web项目
  8. 执行mvn 报错 source-1.5 中不支持 diamond运算符
  9. python 遗传算法 agv_遗传算法在AGV的路径规划中的应用
  10. 自偏置电流镜设计实例
  11. 【题解】L1-6 福到了 (15分)
  12. unity模型制作规范
  13. SAE上使用cron定时发微博
  14. 对计算机专业的认识和理想
  15. linux系统命令make.clean的用法讲解
  16. 基于Java毕业设计校园外卖系统Web端源码+系统+mysql+lw文档+部署软件
  17. 2022年北京中医药大学东方医院三基考试模拟题及答案
  18. C语言100题打卡—第1题
  19. 计算机板块科技基金,科技类基金眼花缭乱,如何判断细分行业占比?
  20. 函数式接口Supplier的用法

热门文章

  1. 【优化算法】龙格-库塔优化算法【含Matlab源码 1799期】
  2. 【TSP】基于matlab GUI模拟退火+蚁群+遗传算法求解旅行商问题【含Matlab源码 1611期】
  3. 【图像配准】基于matlab OpenSUFT图像配准【含Matlab源码 1232期】
  4. 【医学图像分割】 基于matlab GVF算法医学图像分割【含Matlab源码 1213期】
  5. 【图像处理】基于matlab GUI图像滤镜(马赛克+蓝色透镜+素描)【含Matlab源码 1145期】
  6. 【语音识别】基于matlab傅立叶变换0-9数字语音识别【含Matlab源码 384期】
  7. opencv3.4.x和opencv4.x中 cv2.findContours的不同 ValueError: too many values to unpack (expected 2)
  8. python中__future__包
  9. windows mysql 5.5 升级_windows环境mysql5.0晋级mysql5.5
  10. java考ccf_CCF考试试题之门禁系统java解题代码