468. Validate IP Address
Description
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 1:
Input: queryIP = "172.16.254.1" Output: "IPv4" Explanation: This is a valid IPv4 address, return "IPv4".
Example 2:
Input: queryIP = "2001:0db8:85a3:0:0:8A2E:0370:7334" Output: "IPv6" Explanation: This is a valid IPv6 address, return "IPv6".
Example 3:
Input: queryIP = "256.256.256.256" Output: "Neither" Explanation: This is neither a IPv4 address nor a IPv6 address.
Constraints:
queryIP
consists only of English letters, digits and the characters'.'
and':'
.
Solutions
Solution 1: Simulation
We can define two functions isIPv4
and isIPv6
to determine whether a string is a valid IPv4 address and IPv6 address.
The implementation of the function isIPv4
is as follows:
- We first check if the string
s
ends with.
. If so,s
is not a valid IPv4 address, and we directly returnfalse
. - Then we split the string
s
by.
into a string arrayss
. If the length ofss
is not4
,s
is not a valid IPv4 address, and we directly returnfalse
. - For each string
t
in the arrayss
, we check:- If the length of
t
is greater than1
and the first character oft
is0
,t
is not a valid IPv4 address, and we directly returnfalse
. - If
t
is not a number ort
is not in the range of0
to255
,t
is not a valid IPv4 address, and we directly returnfalse
.
- If the length of
- If none of the above conditions are met,
s
is a valid IPv4 address, and we returntrue
.
The implementation of the function isIPv6
is as follows:
- We first check if the string
s
ends with:
. If so,s
is not a valid IPv6 address, and we directly returnfalse
. - Then we split the string
s
by:
into a string arrayss
. If the length ofss
is not8
,s
is not a valid IPv6 address, and we directly returnfalse
. - For each string
t
in the arrayss
, we check:- If the length of
t
is less than1
or greater than4
,t
is not a valid IPv6 address, and we directly returnfalse
. - If the characters in
t
are not all between0
and9
anda
andf
(case insensitive),t
is not a valid IPv6 address, and we directly returnfalse
.
- If the length of
- If none of the above conditions are met,
s
is a valid IPv6 address, and we returntrue
.
Finally, we call the isIPv4
and isIPv6
functions to determine if queryIP
is a valid IPv4 address or IPv6 address. If it is neither, we return Neither
.
The time complexity is $O(n)$, and the space complexity is $O(n)$. Where $n$ is the length of the string queryIP
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
|