468. Validate IP Address
String, AMateList ·Problem Statement
link: LeetCode.cn LeetCode Given a string queryIP, return “IPv4” if IP is a valid IPv4 address, “IPv6” if IP is a valid IPv6 address or “Neither” if IP is not a correct IP of any type.
A valid IPv4 address is an IP in the form “x1.x2.x3.x4” where 0 <= xi <= 255 and xi cannot contain leading zeros. For example, “192.168.1.1” and “192.168.1.0” are valid IPv4 addresses while “192.168.01.1”, “192.168.1.00”, and “192.168@1.1” are invalid IPv4 addresses.
A valid IPv6 address is an IP in the form “x1:x2:x3:x4:x5:x6:x7:x8” where:
1 <= xi.length <= 4 xi is a hexadecimal string which may contain digits, lowercase English letter (‘a’ to ‘f’) and upper-case English letters (‘A’ to ‘F’). Leading zeros are allowed in xi. For example, “2001:0db8:85a3:0000:0000:8a2e:0370:7334” and “2001:db8:85a3:0:0:8A2E:0370:7334” are valid IPv6 addresses, while “2001:0db8:85a3::8A2E:037j:7334” and “02001:0db8:85a3:0000:0000:8a2e:0370:7334” are invalid IPv6 addresses.
Example:
Input: root = [3,5,1,6,2,0,8,null,null,7,4]
Output: [2,7,4]
Input: root = [1]
Output: [1]
Input: root = [0,1,3,null,2]
Output: [2]
Solution Approach
The solution validates whether the given IP address is IPv4, IPv6, or neither by splitting the address based on “.” for IPv4 and “:” for IPv6, then checking the validity of each part according to the respective criteria.
Algorithm
Implement
class Solution:
def validIPAddress(self, queryIP: str) -> str:
def isIPv4(ip):
for p in ip:
if not p or (p[0] == "0" and len(p) > 1) or not p.isdigit() or int(p) > 255:
return "Neither"
return "IPv4"
def isIPv6(ip):
for p in ip:
if len(p) > 4 or len(p) < 1 or not all(c.isdigit() or c.lower() in 'abcdef' for c in p):
return "Neither"
return "IPv6"
ip = queryIP.split(":")
if len(ip) == 8:
return isIPv6(ip)
ip = queryIP.split(".")
if len(ip) == 4:
return isIPv4(ip)
return "Neither"