方法:分割字符串比较

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;
    }
};