牛客BM85 验证IP地址【中等 字符串 Java/Go/PHP】

题目

在这里插入图片描述在这里插入图片描述

在这里插入图片描述在这里插入图片描述

题目链接:
https://www.nowcoder.com/practice/55fb3c68d08d46119f76ae2df7566880
https://www.lintcode.com/problem/1222/description

思路

直接模拟,注意IPv4,ipv6的条件

Java代码

import java.util.*;


public class Solution {
    /**
     * 验证IP地址
     * @param IP string字符串 一个IP地址字符串
     * @return string字符串
     */
    public String solve (String IP) {

         String[] arr = IP.split("\\.");
        String[] arr1 = IP.split(":");
        if(arr.length ==4){
            if(checkIPV4(arr)) return "IPv4";
        }else if(arr1.length==8){
              if(IP.endsWith(":") && !arr1[arr1.length-1].equals("0")) return "Neither";
            if(checkIPV6(arr1)) return "IPv6";
        }

        return "Neither";
    }

    public static boolean checkIPV4(String[] arr){
        for (String s : arr) {
             for(int i=0;i<s.length();i++) {
                int c = s.charAt(i);
                if(!(c>='0' && c<='9')) return false;
            }
            if(Integer.parseInt(s) >255) return false;

            if(s.startsWith("0")) return false;
        }

        return true;
    }

    public static boolean checkIPV6(String[] arr){
        for (String s : arr) {
            if(s.length() ==0) return false;
            if(s.length()>4) return false;

            for(int i=0;i<s.length();i++){
                int c = s.charAt(i);
                if(c>'f' && c<='z' || c>'F' && c<='Z') return false;
            }
        }
        return true;
    }
}

Go代码

package main

import (
	"strconv"
	"strings"
)

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 验证IP地址
 * @param IP string字符串 一个IP地址字符串
 * @return string字符串
 */
func solve(IP string) string {
	// write code here

	arr := strings.Split(IP, ".")
	arr1 := strings.Split(IP, ":")

	if len(arr) == 4 {
		if checkIPV4(IP, arr) {
			return "IPv4"
		}
	}

	if len(arr1) == 8 {
		if checkIPV6(IP, arr1) {
			return "IPv6"
		}
	}

	return "Neither"
}

func checkIPV4(ip string, arr []string) bool {
	if ip[len(ip)-1] == '.' {
		return false
	}
	for _, s := range arr {
		if len(s) > 1 && s[0] == '0' {
			return false
		}
		for j := 0; j < len(s); j++ {
			if !(s[j] >= '0' && s[j] <= '9') {
				return false
			}
		}
		num, _ := strconv.Atoi(s)
		if num > 255 {
			return false
		}
	}
	return true
}
func checkIPV6(ip string, arr []string) bool {
	sepcnt := 0
	for i := 0; i < len(ip); i++ {
		if ip[i] == ':' {
			sepcnt++
		}

	}

	if sepcnt > 7 {
		return false
	}

	for _, s := range arr {
		if len(s) == 0 || len(s) > 4 {
			return false
		}

		for i := 0; i < len(s); i++ {
			c := s[i]
			if c > 'f' && c <= 'z' || c > 'F' && c <= 'Z' {
				return false
			}

		}

	}
	return true
}

PHP代码

<?php


/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 验证IP地址
 * @param IP string字符串 一个IP地址字符串
 * @return string字符串
 */
function solve( $IP ) {
    $arr = explode(".",$IP);
    $arr1 = explode(":",$IP);
    if(count($arr) ==4) {
        if(checkIPv4($IP,$arr)){
            return "IPv4";
        }
    }

    if(count($arr1) ==8){
        if(checkIPv6($IP,$arr1)){
            return "IPv6";
        }
    }


    return "Neither";
}

function checkIPv4($IP,$arr){
    $len = strlen($IP);
    if($IP[$len-1] == '.') return false;

    foreach ($arr as $s){
        $len1= strlen($s);
        if($len1 >1 && $s[0] =='0') return false;
        for($j=0;$j<$len1;$j++){
            if(!($s[$j]>='0' && $s[$j]<='9'))
                return false;
        }

        if(intval($s) > 255) return  false;
    }

    return true;
}

function checkIPv6($IP,$arr){
    $sepcnt =0;
    $n = strlen($IP);
    for($i=0;$i<$n;$i++){
        if($IP[$i] ==':')
            $sepcnt++;
    }


    if($sepcnt >7) return false;
    foreach ($arr as $s){
        $len1 =strlen($s);
        if($len1 ==0 || $len1 > 4) return false;
        for($j=0;$j<$len1;$j++){
            if($s[$j] >'f' && $s[$j]<='z'|| $s[$j]>'F' && $s[$j]<='Z') return false;
        }
    }

    return true;
} $arr = explode(".",$IP);
    $arr1 = explode(":",$IP);
    if(count($arr) ==4) {
        if(checkIPv4($IP,$arr)){
            return "IPv4";
        }
    }

    if(count($arr1) ==8){
        if(checkIPv6($IP,$arr1)){
            return "IPv6";
        }
    }


    return "Neither";
}

function checkIPv4($IP,$arr){
    $len = strlen($IP);
    if($IP[$len-1] == '.') return false;

    foreach ($arr as $s){
        $len1= strlen($s);
        if($len1 >1 && $s[0] =='0') return false;
        for($j=0;$j<$len1;$j++){
            if(!($s[$j]>='0' && $s[$j]<='9'))
                return false;
        }

        if(intval($s) > 255) return  false;
    }

    return true;
}

function checkIPv6($IP,$arr){
    $sepcnt =0;
    $n = strlen($IP);
    for($i=0;$i<$n;$i++){
        if($IP[$i] ==':')
            $sepcnt++;
    }


    if($sepcnt >7) return false;
    foreach ($arr as $s){
        $len1 =strlen($s);
        if($len1 ==0 || $len1 > 4) return false;
        for($j=0;$j<$len1;$j++){
            if($s[$j] >'f' && $s[$j]<='z'|| $s[$j]>'F' && $s[$j]<='Z') return false;
        }
    }

    return true;
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵长辉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值