题解 | 验证IP地址

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

全部评论

相关推荐

01-31 13:31
门头沟学院 Java
程序员卤馆:9✌🏻无暑期都有通关秋招大厂的,你先别急
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务