返回
LeetCode 468:剑指 IP,一击即中!IPv4 vs IPv6 的 C++/Java 详细攻略
后端
2023-09-01 18:45:47
导言
在浩瀚的网络世界中,IP 地址扮演着至关重要的角色,犹如每个计算机和设备的独特身份标识。校验 IP 地址的有效性,对网络工程师和开发者而言,可谓是一项基本功。今天,我们将深入剖析 LeetCode 468 题:验证 IP 地址,共同探索 IPv4 和 IPv6 的奥秘。
题目概览
给定一个字符串 queryIP
,你的任务是判断它是否是一个有效的 IP 地址。IP 地址可以分为 IPv4 和 IPv6 两种类型:
- IPv4 :由四个 0~255 之间的数字组成,用点号(
.
)分隔,如:"192.168.1.1" - IPv6 :由八个 0~FFFF 之间的十六进制数组成,用冒号(
:
)分隔,如:"2001:0db8:85a3:08d3:1319:8a2e:0370:7334"
算法实现
C++
bool isValidIP(string queryIP) {
int segments;
vector<string> tokens;
// IPv4
if (count(queryIP.begin(), queryIP.end(), '.') == 3) {
segments = 4;
stringstream ss(queryIP);
string segment;
while (getline(ss, segment, '.')) {
tokens.push_back(segment);
}
}
// IPv6
else if (count(queryIP.begin(), queryIP.end(), ':') == 7) {
segments = 8;
stringstream ss(queryIP);
string segment;
while (getline(ss, segment, ':')) {
tokens.push_back(segment);
}
}
// 其他情况
else {
return false;
}
// 验证段数
if (tokens.size() != segments) {
return false;
}
// 验证每个段
for (string& token : tokens) {
if (token.empty() || token.size() > 4) {
return false;
}
if (!isValidSegment(token, segments == 4)) {
return false;
}
}
return true;
}
bool isValidSegment(string segment, bool isIPv4) {
// IPv4
if (isIPv4) {
int num;
try {
num = stoi(segment);
}
catch (...) {
return false;
}
return num >= 0 && num <= 255;
}
// IPv6
else {
// TODO: Implement IPv6 segment validation
}
}
Java
class Solution {
public boolean isValidIP(String queryIP) {
int segments;
String[] tokens = queryIP.split("[.:]");
// IPv4
if (tokens.length == 4) {
segments = 4;
}
// IPv6
else if (tokens.length == 8) {
segments = 8;
}
// 其他情况
else {
return false;
}
// 验证段数
if (tokens.length != segments) {
return false;
}
// 验证每个段
for (String token : tokens) {
if (token.isEmpty() || token.length() > 4) {
return false;
}
if (!isValidSegment(token, segments == 4)) {
return false;
}
}
return true;
}
private boolean isValidSegment(String segment, boolean isIPv4) {
// IPv4
if (isIPv4) {
int num;
try {
num = Integer.parseInt(segment);
}
catch (NumberFormatException e) {
return false;
}
return num >= 0 && num <= 255;
}
// IPv6
else {
// TODO: Implement IPv6 segment validation
}
}
}
SEO优化
结语
IP 地址的有效性校验看似简单,但涉及到的细节却不容小觑。通过对 LeetCode 468 题的详细分析,我们不仅掌握了 IP 地址的格式规则,还领略到了算法实现的精妙之处。愿这篇文章能为你开启 IP 地址校验之旅的新篇章,助你在网络世界的探索中一往无前!