FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
leetcode/problems/src/string/ValidateIPAddress.java at master · KindleBooks66/leetcode · GitHub
Uh oh!
There was an error while loading.
Please reload this page
.
KindleBooks66
/
leetcode
Public
forked from
gouthampradhan/leetcode
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
leetcode
/
problems
/
src
/
string
/
ValidateIPAddress.java
Copy path
More file actions
More file actions
Latest commit
History
History
History
95 lines (91 loc) · 3.48 KB
Breadcrumbs
leetcode
/
problems
/
src
/
string
/
ValidateIPAddress.java
Copy path
File metadata and controls
95 lines (91 loc) · 3.48 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package
string
;
/**
* Created by gouthamvidyapradhan on 01/08/2019 Write a function to check whether an input string is
* a valid IPv4 address or IPv6 address or neither.
*
* <p>IPv4 addresses are canonically represented in dot-decimal notation, which consists of four
* decimal numbers, each ranging from 0 to 255, separated by dots ("."), e.g.,172.16.254.1;
*
* <p>Besides, leading zeros in the IPv4 is invalid. For example, the address 172.16.254.01 is
* invalid.
*
* <p>IPv6 addresses are represented as eight groups of four hexadecimal digits, each group
* representing 16 bits. The groups are separated by colons (":"). For example, the address
* 2001:0db8:85a3:0000:0000:8a2e:0370:7334 is a valid one. Also, we could omit some leading zeros
* among four hexadecimal digits and some low-case characters in the address to upper-case ones, so
* 2001:db8:85a3:0:0:8A2E:0370:7334 is also a valid IPv6 address(Omit leading zeros and using upper
* cases).
*
* <p>However, we don't replace a consecutive group of zero value with a single empty group using
* two consecutive colons (::) to pursue simplicity. For example, 2001:0db8:85a3::8A2E:0370:7334 is
* an invalid IPv6 address.
*
* <p>Besides, extra leading zeros in the IPv6 is also invalid. For example, the address
* 02001:0db8:85a3:0000:0000:8a2e:0370:7334 is invalid.
*
* <p>Note: You may assume there is no extra space or special characters in the input string.
*
* <p>Example 1: Input: "172.16.254.1"
*
* <p>Output: "IPv4"
*
* <p>Explanation: This is a valid IPv4 address, return "IPv4". Example 2: Input:
* "2001:0db8:85a3:0:0:8A2E:0370:7334"
*
* <p>Output: "IPv6"
*
* <p>Explanation: This is a valid IPv6 address, return "IPv6". Example 3: Input: "256.256.256.256"
*
* <p>Output: "Neither"
*
* <p>Explanation: This is neither a IPv4 address nor a IPv6 address.
*
* <p>Solution: O(N) split the string by each '.' or ':' and then validate each parts.
*/
public
class
ValidateIPAddress
{
public
static
void
main
(
String
[]
args
) {
System
.
out
.
println
(
new
ValidateIPAddress
().
validIPAddress
(
"02001:0db8:85a3:0000:0000:8a2e:0370:7334"
));
}
public
String
validIPAddress
(
String
IP
) {
if
(
IP
.
contains
(
"."
)) {
if
(
IP
.
endsWith
(
"."
) ||
IP
.
startsWith
(
"."
))
return
"Neither"
;
String
[]
ipv4
=
IP
.
split
(
"
\\
."
);
if
(
ipv4
.
length
!=
4
)
return
"Neither"
;
else
{
for
(
String
part
:
ipv4
) {
if
(
part
.
isEmpty
())
return
"Neither"
;
if
(
part
.
length
() >
1
&&
part
.
startsWith
(
"0"
))
return
"Neither"
;
else
{
if
(
part
.
length
() >
3
)
return
"Neither"
;
for
(
char
c
:
part
.
toCharArray
()) {
if
(
c
<
'0'
||
c
>
'9'
)
return
"Neither"
;
}
int
value
=
Integer
.
parseInt
(
part
);
if
(
value
<
0
||
value
>
255
)
return
"Neither"
;
}
}
}
return
"IPv4"
;
}
else
if
(
IP
.
contains
(
":"
)) {
if
(
IP
.
endsWith
(
":"
) ||
IP
.
startsWith
(
":"
))
return
"Neither"
;
String
[]
ipv6
=
IP
.
split
(
":"
);
if
(
ipv6
.
length
!=
8
)
return
"Neither"
;
else
{
for
(
String
part
:
ipv6
) {
if
(
part
.
isEmpty
())
return
"Neither"
;
if
(
part
.
length
() >
4
)
return
"Neither"
;
else
{
for
(
char
c
:
part
.
toCharArray
()) {
if
((
c
>=
'0'
&&
c
<=
'9'
) || (
c
>=
'a'
&&
c
<=
'f'
) || (
c
>=
'A'
&&
c
<=
'F'
)) {
}
else
{
return
"Neither"
;
}
}
}
}
}
return
"IPv6"
;
}
else
return
"Neither"
;
}
}
Back
|
FazBrowse Home
|
New Git URL