1. 题目
2. 思路
(1) 模拟法
- 首先区分出是IPv4还是IPv6,然后根据各自的规则进行判断即可。
3. 代码
import java.util.HashSet;
import java.util.Set;
public class Test {
public static void main(String[] args) {
}
}
class Solution {
/**
* 验证IP地址
*
* @param IP string字符串 一个IP地址字符串
* @return string字符串
*/
public String solve(String IP) {
char[] chars = IP.toCharArray();
int n = chars.length;
boolean IPv4 = true;
for (int i = 0; i < n; i++) {
if (chars[i] == '.') {
IPv4 = true;
break;
}
if (chars[i] == ':') {
IPv4 = false;
break;
}
}
int len = IPv4 ? 3 : 4;
char ch = IPv4 ? '.' : ':';
Set<Character> set = new HashSet<>();
for (char i = '0'; i <= '9'; i++) {
set.add(i);
}
if (!IPv4) {
for (char i = 'a'; i <= 'f'; i++) {
set.add(i);
}
for (char i = 'A'; i <= 'F'; i++) {
set.add(i);
}
}
int left = 0;
int right = 0;
int count = 0;
while (right < n) {
while (right < n && chars[right] != ch) {
if (!set.contains(chars[right])) {
return "Neither";
}
right++;
}
if (right == n - 1) {
return "Neither";
}
int cur = right - left;
if (cur == 0 || cur > len) {
return "Neither";
}
if (IPv4) {
String s = IP.substring(left, right);
int num = Integer.parseInt(s);
String temp = String.valueOf(num);
if (num > 255 || !s.equals(temp)) {
return "Neither";
}
}
right++;
left = right;
count++;
}
if (IPv4) {
return count == 4 ? "IPv4" : "Neither";
} else {
return count == 8 ? "IPv6" : "Neither";
}
}
}