题解 | #验证IP地址#

验证IP地址

http://www.nowcoder.com/practice/55fb3c68d08d46119f76ae2df7566880

import java.util.*;


public class Solution {
    /**
     * 验证IP地址
     * @param IP string字符串 一个IP地址字符串
     * @return string字符串
     */
    public String solve (String IP) {
        if(IP == null || IP.length() < 7) return "Neither" ;
        if(IP.contains(".")) {//按照IPV4校验
            return checkIPV4(IP) ;
        } else if(IP.contains(":")) {//按照IPV6校验
            return checkIPV6(IP) ;
        } else {
            return "Neither" ;
        }
    }
    //验证IPV6的字符串是否合法
    public String checkIPV6(String IP) {
        char[] arr = IP.toCharArray() ;
        int i = 0 ;
        int j = 0 ;
        int count = 8 ;
        while(i < arr.length) {
            j = i ;
            while(j < arr.length && arr[j] != ':') {
                j ++ ;
            }
            if(!isOK6(arr , i , j - 1)) return "Neither" ;
            i = j + 1 ;
            count -- ;
        }
        if(count == 0 && i == arr.length + 1) {
            return "IPv6" ;          
        } else {
            return "Neither" ;
  
        }
    }
    //验证IPV6的每一段是否合法
    public boolean isOK6(char[] arr , int i , int j) {
        int len = j - i + 1 ;
        if(len < 1) return false ;
        if(len > 4) return false ;
        for(int k = i ; k <= j ; k ++) {
            if(!((arr[k] >= '0' && arr[k] <= '9') || (arr[k] >= 'a' && arr[k] <= 'f') || (arr[k] >= 'A' && arr[k] <= 'F'))) {
                return false ;
            }
        }
        return true ;
    }
    //验证IPV4的字符串是否合法
    public String checkIPV4(String IP) {
        char[] arr = IP.toCharArray() ;
        int i = 0 ;
        int j = 0 ;
        int count = 4 ;
        while(i < arr.length) {
            j = i ;
            while(j < arr.length && arr[j] != '.') {
                j ++ ;
            }
            if(!isOK4(arr , i , j-1)) return "Neither" ;
            i = j + 1 ;
            count -- ;
        }
        if(count == 0 && i == arr.length + 1) {
            return "IPv4" ;
        } else {
            return "Neither" ;
            
        }
    }
    //验证IPV4的每一段是否合法
    public boolean isOK4(char[] arr , int i , int j) {
        int len = j - i + 1 ;
        if(len < 1) return false ;
        if(arr[i] == '0' && len > 1) return false ;
        int base = 1 ;
        int count = 0 ;
        for(int k = j ; k >= i ; --k) {
            if(!(arr[k] >= '0' && arr[k] <= '9')) {
                return false ;
            }
            count += (arr[k]-'0') * base ;
            base *= 10 ;
        }
        if(count >= 0 && count <= 255) {
            return true ;
        } else {
            return false ;
        }
    }
}

一个菜鸟的算法刷题记录 文章被收录于专栏

分享一个菜鸟的成长记录

全部评论

相关推荐

听说改名字就能收到offer哈:Radis写错了兄弟
点赞 评论 收藏
分享
Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务