方法:分割字符串比较
1、判断是否为IPv4
首先将字符串分割开,遇到‘ . ’字符就进行分割;
对分割后的字符串进行判断,需要满足以下条件:
(1)分割后的字符串个数为4个;
(2)字符串的每个字符都为数字;
(3)字符串的数字大小处于0-255之间;
(4)字符串的长度大于1时,首个字符不得为0。
1、判断是否为IPv6
首先将字符串分割开,遇到‘ :’字符就进行分割;
对分割后的字符串进行判断,需要满足以下条件:
(1)分割后的字符串个数为8个;
(2)字符串的每个字符都为数字或为a-f,A-F的字母;
(3)字符串的长度不得超过4且大于0。
时间复杂度:o(n)
空间复杂度:o(1)
class Solution { public: string solve(string IP) { if (isIPv4(IP)) return "IPv4"; else if (isIPv6(IP)) return "IPv6"; else return "Neither"; } // 判断是否为IPv4 bool isIPv4(string IP) { vector<string> res; string temp; // 将字符串以'.'拆分开四段分别存储进数组 for (int i = 0; i < IP.length(); i++) { if (IP[i] == '.') { res.push_back(temp); temp = ""; } else { temp += IP[i]; } // 保证每个分段的字符串为数字 if (!(IP[i] == '.' || (IP[i] >= '0' && IP[i] <= '9'))) return false; } res.push_back(temp); if (res.size() != 4) return false; for (int i = 0; i < 4; i++) { if (!(stoi(res[i]) < 255 && stoi(res[i]) >= 0)) return false; if (res[i][0] == '0' && res[i].length() != 0) return false; } return true; } // 判断是否为IPv6 bool isIPv6(string IP) { vector<string> res; string temp; // 将字符串以':'拆分开8段分别存储进数组 for (int i = 0; i < IP.length(); i++) { if (IP[i] == ':') { res.push_back(temp); temp = ""; } else { temp += IP[i]; } // 保证每个分段的字符串为16进制 if (!(IP[i] == ':' || (IP[i] >= '0' && IP[i] <= '9') || (IP[i] >= 'a' && IP[i] <= 'f') || (IP[i] >= 'A' && IP[i] <= 'F'))) return false; } res.push_back(temp); if (res.size() != 8) return false; for (int i = 0; i < 8; i++) { if (res[i].length() > 4 || res[i].length() <= 0) return false; } return true; } };