美文网首页程序员
力扣 468 合并区间

力扣 468 合并区间

作者: zhaojinhui | 来源:发表于2020-10-28 08:07 被阅读0次

    题意:给定一个string,判断是否是合法字符串

    思路:

    1. 查看IP是否为null或空,是就返回Neither
    2. 查看IP是否以'.'或':'结尾,是就返回Neither
    3. IP用'.' 分割,如果长度是4,那么就用IPv4的判断方程,核实每一个字段
    4. 否则,IP用':' 分割,如果长度是8,那么就用IPv6的判断方程,核实每一个字段
    5. 否则返回Neither

    思想:字符串的组合

    复杂度:时间O(n),空间O(n)

    class Solution {
        public String validIPAddress(String IP) {
            if(IP == null || IP.length() == 0)
                return "Neither";
            if(IP.charAt(IP.length() - 1) == '.' || IP.charAt(IP.length() - 1) == ':')
                    return "Neither";
            String[] IPs = IP.split("\\.");
            if(IPs.length == 4) {
                for(String ip: IPs) {
                    if(!isValidIPv4(ip))
                        return "Neither";
                }
                return "IPv4";
            } else {
                IPs = IP.split(":");
                if(IPs.length == 8) {
                    for(String ip: IPs) {
                        if(!isValidIPv6(ip))
                            return "Neither"; 
                    }
                    return "IPv6";
                }
                return "Neither";
            }
        }
        boolean isValidIPv4(String ip) {
            if(ip.length() > 3 || ip.length() == 0)
                return false;
            if(ip.length() > 1 && ip.charAt(0) == '0')
                return false;
            int num = 0;
            for(int i=0;i<ip.length();i++) {
                char cur = ip.charAt(i);
                if(cur < '0' || cur > '9')
                    return false;
                num = num*10 + (cur - '0'); 
            }
            if(num > 255)
                return false;
            return true;
        }
        boolean isValidIPv6(String ip) {
            if(ip.length() > 4 || ip.length() == 0)
                return false;
            for(int i=0;i<ip.length();i++) {
                char cur = ip.charAt(i);
                if((cur >= 'a' && cur <= 'f') || (cur >= 'A' && cur <= 'F') || 
                   (cur >= '0' && cur <= '9'))
                    continue;
                else 
                    return false;
            }
            return true;
        }
    }
    

    相关文章

      网友评论

        本文标题:力扣 468 合并区间

        本文链接:https://www.haomeiwen.com/subject/upzzmktx.html