#include <cstdio>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 验证IP地址
* @param IP string字符串 一个IP地址字符串
* @return string字符串
*/
bool checkv4(string& v4IP) {
v4IP += '.';
int n = v4IP.size();
int l = 0, r = 0;
if (v4IP[0] == '.') return false;
for (int i = 0; i < n; i++) {
if ((v4IP[i] >= '0' && v4IP[i] <= '9') || v4IP[i] == '.') continue;
else return false;
}
for (int i = 0; i < n - 1; i++) {
if (v4IP[i] == '.' && v4IP[i + 1] == '.') return false;
}
while (r < n) {
if (v4IP[r] == '.') {
if(r-l>3) return false;
if (v4IP[l] == '0' && r - l != 1) {
return false;
}
int tmp = stoi(v4IP.substr(l, r - l));
if (tmp < 0 || tmp > 255) return false;
l = r+1;
}
r++;
}
v4IP.pop_back();
return true;
}
bool checkv6(string& v6IP) {
v6IP += ':';
int n = v6IP.size();
int l = 0, r = 0;
if (v6IP[0] == ':') return false;
for (int i = 0; i < n; i++) {
if ((v6IP[i] >= '0' && v6IP[i] <= '9') || v6IP[i] == ':'||(v6IP[i] >= 'a' && v6IP[i] <= 'f')||(v6IP[i] >= 'A' && v6IP[i] <= 'F')) continue;
else return false;
}
for (int i = 0; i < n - 1; i++) {
if (v6IP[i] == ':' && v6IP[i + 1] == ':') return false;
}
while (r < n) {
if (v6IP[r] == ':') {
if(r-l>4) return false;
l = r+1;
}
r++;
}
v6IP.pop_back();
return true;
}
string solve(string IP) {
// write code here
int n = IP.size();
int count1 = 0, count2 = 0;
for (const char& ch : IP) {
if (ch == '.') count1++;
else if (ch == ':') count2++;
}
if (count1 == 3 && count2 == 0) {
//IPV4
if (checkv4(IP)) return "IPv4";
} else if (count1 == 0 && count2 == 7) {
if (checkv6(IP)) return "IPv6";
} else return "Neither";
return "Neither";
}
};