题目地址:
https://leetcode.com/problems/validate-ip-address/
给定一个IP,判断其是否是IPv4或者IPv6。如果是前者则输出“IPv4”,如果是后者则输出“IPv6”,如果都不是则输出“Neither”。
按照定义验证即可。代码如下:
public class Solution {
public String validIPAddress(String IP) {
if (IP.isEmpty() || IP.startsWith(".") || IP.startsWith(":") || IP.endsWith(".") || IP.endsWith(":")) {
return "Neither";
}
if (IP.contains(".")) {
// 这里按照"."做split需要做转义
String[] ss = IP.split("\\.");
if (ss.length != 4) {
return "Neither";
}
for (int i = 0; i < ss.length; i++) {
String s = ss[i];
// 有前导0则输出Neither
if (s.length() > 1 && s.charAt(0) == '0') {
return "Neither";
}
// 空串也输出Neither
if (s.isEmpty()) {
return "Neither";
}
int n = 0;
for (int j = 0; j < s.length(); j++) {
char ch = s.charAt(j);
if (!Character.isDigit(ch)) {
return "Neither";
}
n = n * 10 + ch - '0';
}
if (n < 0 || n > 255) {
return "Neither";
}
}
return "IPv4";
} else if (IP.contains(":")) {
String[] ss = IP.split(":");
if (ss.length != 8) {
return "Neither";
}
for (int i = 0; i < ss.length; i++) {
String s = ss[i];
if (s.length() < 1 || s.length() > 4) {
return "Neither";
}
if (s.isEmpty()) {
return "Neither";
}
for (int j = 0; j < s.length(); j++) {
char ch = s.charAt(j);
if (!('0' <= ch && ch <= '9') && !('a' <= ch && ch <= 'f') && !('A' <= ch && ch <= 'F')) {
return "Neither";
}
}
}
return "IPv6";
}
return "";
}
}
时空复杂度 O ( n ) O(n) O(n)。