LeetCode——468.验证IP地址

通过万岁!!!

  • 题目:就是给你一个字符串,按照一定规则,判断字符串是不是IP地址,如果是IPv4的就输出IPv4,如果是IPv6的就输出IPv6,否则输出Neither。
    • IPv4:4组0-255之间的数,中间用“.”进行分割。每组数不允许以0开头,但是可以单独写0。
    • IPv6:8组,每组长度为0-4,每个字符是16进制的。可以存在0开头。
  • 思路:首先就是判断是什么类型的。长度如果小于15的话,就是ipv4的,如果大于15的话,就是ipv6,如果等于15的话,我们需要再次判断。这时候直接判断第二个字符是不是“:”,如果是就是16进制的,否则就是二进制。因为长度为15,只有可能是4*3+3和8+7,也就是ipv4满和ipv6每组都是个位数。
  • 技巧:这里就是字符串的拆分和遍历,不过需要注意,用“.”进行拆分的时候,需要split(“\.”),还有就是java拆分字符串,最后一个字符要是满足条件,不会给你补充一个空字符放在最后。

java代码

class Solution {

    public String validIPAddress(String queryIP) {
        int len = queryIP.length();
        if (len == 0) return "Neither";
        if (len > 15 || (len == 15 && queryIP.charAt(1) == ':')) {
            if (queryIP.charAt(len - 1) == ':') return "Neither";
            String[] split = queryIP.split(":");
            if (split.length != 8) return "Neither";
            for (int i = 0; i < 8; i++) {
                if (!six(split[i])) {
                    return "Neither";
                }
            }
            return "IPv6";
        } else {
            if (queryIP.charAt(len - 1) == '.') return "Neither";
            String[] split = queryIP.split("\\.");
            if (split.length != 4) return "Neither";
            for (int i = 0; i < 4; i++) {
                if (!four(split[i])) {
                    return "Neither";
                }
            }
            return "IPv4";
        }
    }


    public boolean six(String s) {
        int len = s.length();
        if (len > 4 || len == 0) return false;

        for (int i = 0; i < len; i++) {
            if (!((s.charAt(i) >= 'a' && s.charAt(i) <= 'f') ||
                    (s.charAt(i) >= 'A' && s.charAt(i) <= 'F') ||
                    (s.charAt(i) >= '0' && s.charAt(i) <= '9'))) {
                return false;
            }
        }
        return true;
    }

    public boolean four(String s) {
        int len = s.length();
        if (len > 3 || len == 0) return false;
        if (s.charAt(0) == '0') {
            if (len == 1) {
                return true;
            } else {
                return false;
            }
        } else {
            for (int i = 0; i < len; i++) {
                if (!Character.isDigit(s.charAt(i))) {
                    return false;
                }
            }
            int i = Integer.parseInt(s);
            if (i >= 0 && i <= 255) {
                return true;
            } else {
                return false;
            }
        }
    }
}
  • 总结:题目不难,就是比较麻烦,并且需要注意,我们需要单独判断queryIP.charAt(len - 1) = ‘:’ 或者是=‘.’,这是因为这时候我们通过数组的长度判断不出来,也就是如果最后一个字符是要拆分的字符,则数组最后不会补一个空字符串。还有就是主要“.”这个符号的比较。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值