题目描述
1 <= xi.length <= 4xi 是一个 十六进制字符串 ,可以包含数字、小写英文字母( 'a' 到 'f' )和大写英文字母( 'A' 到 'F' )。- 在
xi 中允许前导零。
示例 1:
输入:queryIP = "172.16.254.1"
输出:"IPv4"
解释:有效的 IPv4 地址,返回 "IPv4"
示例 2:
输入:queryIP = "2001:0db8:85a3:0:0:8A2E:0370:7334"
输出:"IPv6"
解释:有效的 IPv6 地址,返回 "IPv6"
示例 3:
输入:queryIP = "256.256.256.256"
输出:"Neither"
解释:既不是 IPv4 地址,又不是 IPv6 地址
提示:
queryIP 仅由英文字母,数字,字符 '.' 和 ':' 组成。
难度是中等,但通过率异常低。这种情况 往往是因为题目的细节太多了,让解题直接变成面向测试编程。我尝试了三次,成功了。
class Solution:
def validIPAddress(self, queryIP: str) -> str:
strLs4 = '01234567'
strLs6 = '01234567abcdefABCDEF'
ls = []
# IPv4判断
if '.' in queryIP:
ls=queryIP.split('.')
# 判断分隔长度
if len(ls)!=4:
return 'Neither'
for i in range(len(ls)):
# 长度判断
if not 1<=len(ls[i])<=3:
return 'Neither'
# 前导零判断
if( len(ls[i])>1 and ls[i][0]=='0'):
return 'Neither'
for j in range(len(ls[i])):
if ls[i][j] not in strLs4:
return 'Neither'
if not( 0<=int(ls[i])<=255):
return 'Neither'
return 'IPv4'
# IPv6判断
elif ':' in queryIP:
ls = queryIP.split(':')
# 判断分隔长度
if len(ls)!=8:
return 'Neither'
for i in range(len(ls)):
#长度判断
if not 1<=len(ls[i])<=4:
return 'Neither'
for j in range(len(ls[i])):
if ls[i][j] not in strLs6:
return 'Neither'
return 'IPv6'
# 啥都不含
else:
return 'Neither'
只能说这是道细节题,可以用正则表达式,但只是写法上简单了,实际执行还是慢了一步,快的方法都是一点点判断,得出结果。