06(Aug) Validate an IP Address
06. Validate an IP Address
The problem can be found at the following link: Question Link
Problem Description
You are given a string str
in the form of an IPv4 address. Your task is to validate the IPv4 address. If it is valid, return true
; otherwise, return false
.
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.
A valid IPv4 address is of the form x1.x2.x3.x4
where 0 <= x1, x2, x3, x4 <= 255
. Thus, we can write the generalized form of an IPv4 address as (0-255).(0-255).(0-255).(0-255)
.
Note: Here we are considering numbers only from 0 to 255, and any additional leading zeroes will be considered invalid.
Examples:
Input:
str = "222.111.111.111"
Output:
true
Explanation: The IPv4 address is as per the criteria mentioned, and all four decimal numbers lie in the specified range.
Input:
str = "5555..555"
Output:
false
Explanation: "5555..555" is not a valid IPv4 address, as the middle two portions are missing.
My Approach
Initialization:
Define variables
segments
,num
, andlength
to keep track of the number of segments, the current number, and the length of the current number, respectively.
Validation Loop:
Iterate through each character in the string
str
.If the character is a dot (
.
):Check if the
length
is between 1 and 3 and thenum
is between 0 and 255.If any of these checks fail, return
false
.Increment
segments
, resetnum
, andlength
.
If the character is a digit:
Check if the current segment starts with '0' and is not followed by a dot.
Calculate the new
num
and incrementlength
.
If the character is neither a dot nor a digit, return
false
.
Final Checks:
Ensure the last segment is valid by checking the
length
andnum
.Ensure there are exactly four segments.
Return:
Return
true
if the IP address is valid, otherwisefalse
.
Time and Auxiliary Space Complexity
Expected Time Complexity: O(n), as we iterate through each character in the string once.
Expected Auxiliary Space Complexity: O(1), as we use a constant amount of additional space.
Code (C++)
class Solution {
public:
int isValid(string str) {
int n = str.size();
int segments = 0;
int num = 0;
int length = 0;
for (int i = 0; i < n; ++i) {
if (str[i] == '.') {
if (length == 0 || length > 3 || num > 255) return 0;
segments++;
num = 0;
length = 0;
} else if (isdigit(str[i])) {
if (length == 0 && str[i] == '0' && (i + 1 < n && str[i + 1] != '.')) return 0;
num = num * 10 + (str[i] - '0');
length++;
} else {
return 0;
}
}
if (length == 0 || length > 3 || num > 255) return 0;
segments++;
return segments == 4 ? 1 : 0;
}
};
Code (Java)
class Solution {
public boolean isValid(String str) {
int n = str.length();
int segments = 0;
int num = 0;
int length = 0;
for (int i = 0; i < n; ++i) {
if (str.charAt(i) == '.') {
if (length == 0 || length > 3 || num > 255)
return false;
segments++;
num = 0;
length = 0;
} else if (Character.isDigit(str.charAt(i))) {
if (length == 0 && str.charAt(i) == '0' && (i + 1 < n && str.charAt(i + 1) != '.'))
return false;
num = num * 10 + (str.charAt(i) - '0');
length++;
} else {
return false;
}
}
if (length == 0 || length > 3 || num > 255)
return false;
segments++;
return segments == 4;
}
}
Code (Python)
class Solution:
def isValid(self, str):
n = len(str)
segments = 0
num = 0
length = 0
for i in range(n):
if str[i] == '.':
if length == 0 or length > 3 or num > 255:
return False
segments += 1
num = 0
length = 0
elif str[i].isdigit():
if length == 0 and str[i] == '0' and (i + 1 < n and str[i + 1] != '.'):
return False
num = num * 10 + int(str[i])
length += 1
else:
return False
if length == 0 or length > 3 or num > 255:
return False
segments += 1
return segments == 4
Contribution and Support
For discussions, questions, or doubts related to this solution, feel free to connect on LinkedIn: Any Questions. Letβs make this learning journey more collaborative!
β If you find this helpful, please give this repository a star! β
πVisitor Count
Last updated