Сложность: medium
Допустимый IPv4-адрес — это IP в форме "x1.x2.x3.x4", где 0 <= xi <= 255 и xi не может содержать ведущие нули. Например, "192.168.1.1" и "192.168.1.0" являются допустимыми IPv4-адресами, тогда как "192.168.01.1", "192.168.1.00" и "192.168@1.1" являются недопустимыми IPv4-адресами.
Допустимый IPv6-адрес — это IP в форме "x1:x2:x3:x4:x5:x6:x7
", где:
1 <= xi.length <= 4
xi — это шестнадцатеричная строка, которая может содержать цифры, строчные английские буквы ('a' до 'f') и прописные английские буквы ('A' до 'F').
Ведущие нули в xi допускаются.
Пример:
Input: queryIP = "172.16.254.1"
Output: "IPv4"
Explanation: This is a valid IPv4 address, return "IPv4".
👨💻 Алгоритм:
1⃣Для проверки адреса IPv4:
Разделить IP на четыре части по разделителю ".".
Проверить каждую подстроку:
Является ли она целым числом между 0 и 255.
Не содержит ли она ведущих нулей (исключение — число "0").
2⃣Для проверки адреса IPv6:
Разделить IP на восемь частей по разделителю ":".
Проверить каждую подстроку:
Является ли она шестнадцатеричным числом длиной от 1 до 4 символов.
3⃣Если IP не соответствует ни одному из форматов, вернуть "Neither".
😎 Решение:
class Solution {
validateIPv4(IP) {
const nums = IP.split(".");
if (nums.length !== 4) return "Neither";
for (let x of nums) {
if (x.length === 0 || x.length > 3) return "Neither";
if (x[0] === '0' && x.length !== 1) return "Neither";
if (!/^\d+$/.test(x)) return "Neither";
if (parseInt(x) > 255) return "Neither";
}
return "IPv4";
}
validateIPv6(IP) {
const nums = IP.split(":");
const hexdigits = "0123456789abcdefABCDEF";
if (nums.length !== 8) return "Neither";
for (let x of nums) {
if (x.length === 0 || x.length > 4) return "Neither";
for (let ch of x) {
if (!hexdigits.includes(ch)) return "Neither";
}
}
return "IPv6";
}
validIPAddress(IP) {
if (IP.split(".").length === 4) {
return this.validateIPv4(IP);
} else if (IP.split(":").length === 8) {
return this.validateIPv6(IP);
} else {
return "Neither";
}
}
}Ставь 👍 и забирай 📚 Базу знаний
