import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 验证IP地址
* @param IP string字符串 一个IP地址字符串
* @return string字符串
*/
public String solve (String IP) {
// write code here
if (validIpv4(IP)) return "IPv4";
if (validIpv6(IP)) return "IPv6";
return "Neither";
}
private boolean validIpv6(String s) {
String[] parts = s.split(":", -1);
if (parts.length != 8) return false;
for (String part : parts) {
if (part.isEmpty()) return false; // 不允许为空
if (part.length() > 4) return false; // 不允许多余的 0
if (!check(part)) return false;
}
return true;
}
private boolean check(String p) {
for (int i=0; i<p.length(); i++) {
char c = p.charAt(i);
if (!Character.isDigit(c)) {
c = Character.toLowerCase(c);
if (c < 'a' || c > 'f') {
return false;
}
}
}
return true;
}
private boolean validIpv4(String s) {
String[] parts = s.split("\\.", -1);
//System.out.println("len:" + parts.length);
if (parts.length != 4) return false;
for (String part : parts) {
// check every part
if (!validPart(part)) {
return false;
}
}
return true;
}
private boolean validPart(String p) {
if (p.isEmpty()) return false;
if (p.charAt(0) == '0' && p.length() != 1) return false;
int num = 0;
for (int i=0; i<p.length(); i++) {
int digit = p.charAt(i) - '0';
num = num * 10 + digit;
}
//System.out.println(num);
return num >= 0 && num <= 255;
}
}