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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/672983.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

docker基础,docker安装mysql,docker安装Nginx,docker安装mq,docker基础命令

核心功能操作镜像 Docker安装mysql docker run -d --name mysql -p 3306:3306 -e TZAsia/Shanghai -e MYSQL_ROOT_PASSWORDlcl15604007179 mysql docker的基本操作 docker rm 容器名称即可 docker ps 查看当前运行的容器 docker rm 干掉当前容器 docker logs 查看容器命令日…

Day 41 NGINX详解

Nginx详解 一、HTTP协议 HTTP协议是Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;的缩写,是用于从万维网&#xff08;WWW:World Wide Web &#xff09;服务器传输超文本到本地浏览器的传送协议。 1、HTTP 工作原理 HTTP协议通信流程 WEB Server&…

数组基础-笔记

数组是非常基础的数据结构&#xff0c;实现运用和理解是两回事 数组是存放在连续内存空间上的相同类型的数据的集合 可以方便的通过下表索引的方式获取到下标下对应的数据。 举一个字符数组的例子&#xff1a; 注意两点&#xff1a; 数组下标从0开始 数组内存空间的地址是连…

AOP案例

黑马程序员JavaWeb开发教程 文章目录 一、案例1.1 案例1.2 步骤1.2.1 准备1.2.2 编码 一、案例 1.1 案例 将之前案例中增、删、改相关节后的操作日志记录到数据库表中。 操作日志&#xff1a;日志信息包含&#xff1a;操作人、操作时间、执行方法的全类名、执行方法名、方法…

pytest框架用例命名规则详解

pytest 测试用例的命名规则是为了确保 pytest 能够正确地识别和执行测试用例。 以下是关于 pytest 测试用例命名规则的详细解释&#xff1a; 1 编写单个测试文件 单个测试文件须以‘test_’开头或者以‘_test’结尾 比如我们创建test_case1.py case2_test.py文件。 2 在单个…

【Mac】Lightroom Classic 2024(LrC 2024中文版) v13.1安装教程

软件介绍 Lightroom Classic 2024 for Mac是一款功能强大的照片编辑和组织软件&#xff0c;专为专业摄影师和爱好者设计。它提供了一系列工具和功能来增强和管理您的数码照片。Lightroom Classic 2024在照片组织和管理方面进行了重大改进。它新增了一个智能化的“发现”面板&a…

电容的电路应用

电容的电路应用 1、陶瓷电容应用于滤波 电源电路&#xff0c;负载电流较小时&#xff0c;可以使用陶瓷电容进行滤波。 C18电容起到滤波作用&#xff0c;因为负载电流比较小&#xff0c;所以可以用小容量的电容&#xff0c;比如经典的10uF、1uF、4.7uF都是可以的 滤波过程&am…

名下企业查询,清晰明了;在线操作,方便快捷

在现代社会&#xff0c;越来越多的人开始涉足创业和投资&#xff0c;拥有自己的企业成为一种时尚。然而&#xff0c;随之而来的是繁琐的企业注册流程和复杂的信息查询。为了解决这个问题&#xff0c;挖数据平台推出了一项名下企业查询接口&#xff0c;提供了一种方便快捷的方式…

easy-captcha生成验证码

引入依赖 <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>…

【Docker】学习笔记(超万字图文整理)

前言 再此感谢黑马程序员提供的Docker课程&#xff01; 什么是Docker&#xff1f;看这一篇干货文章就够了&#xff01; UPD: 补充更新微服务集群、Docker镜像仓库部分内容 所有笔记、生活分享首发于个人博客 想要获得最佳的阅读体验&#xff08;无广告且清爽&#xff09;&#…

低代码开发系统是什么?它有那些部分组成?

低代码开发系统是什么&#xff1f;它有那些部分组成&#xff1f; 一、引言 在当今快速变化的商业环境中&#xff0c;企业对于快速响应市场需求、降低开发成本和提高开发效率的需求日益增强。低代码开发系统&#xff08;Low-Code Development Platform&#xff09;应运而生&am…

视频监控平台AS1000:通过网络SDK接入松下视频监控设备(Panasonic监控摄像机) 的源代码的函数和功能介绍及分享

目录 一、视频监控平台介绍 1、概述 2、视频接入能力介绍 3、功能介绍 二、PANASONIC网络摄像机 1、产品种类与定位 2、规格参数 3、功能特点 4、环境适应性 5、网络功能 6、其他特性 三、代码和解释 1、代码和注释 2、函数功能说明 &#xff08;1&#xff09;处…

SpringBoot项目启动时提示程序包不存在和找不到符号

一、前言 最近接手同事开发的一个Springboot工作项目&#xff0c;从svn上整体拉取下来后&#xff0c;构建完成后&#xff0c;启动的时候遇到了程序包找不到的情况&#xff0c;记录一下处理过程&#xff1b; 二、项目问题 1、报错信息&#xff1a;启动后报 java: 程序包org.sp…

MySql 查询缓存

前言 MySQL的查询缓存&#xff08;Query Cache&#xff09;是一个在内存中存储SELECT语句及其结果集的机制&#xff0c;目的是避免对相同的查询进行重复的解析、编译和执行&#xff0c;从而提高数据库性能。 Mysql 结构图如下&#xff1a; 查询缓存的工作流程大致如下&#…

UE5 读取本地图片并转换为base64字符串

调试网址&#xff1a;在线图像转Base64 - 码工具 (matools.com) 注意要加&#xff08;data:image/png;base64,&#xff09; FString UBasicFuncLib::LoadImageToBase64(const FString& ImagePath) {TArray<uint8> ImageData;// Step 1: 读取图片文件到字节数组if (!…

1、pyton环境的安装-windows系统下

python官网 https://www.python.org/ 点击黄色的按钮&#xff0c;下载完成&#xff0c;如下&#xff1a; 双击安装&#xff0c;我现在以3.10.4版本进行安装说明&#xff1a; 一定要勾选上下边的to path&#xff0c;然后选择自定义安装 全选&#xff0c;点击next 选择要安装的路…

面试官:Spring中都应用了哪些设计模式?

设计模式是我们项目中经常会涉及到的项目进行重构、解构时的一种方法。 比如我们常见的单例模式、工厂模式、策略模式、装饰器模式等都是比较常用的&#xff1b;关于 23 种设计模式&#xff0c;大家可以找本书专门去学习一下&#xff0c;在 Java 框架的源码中也不例外&#xf…

动态SQL where, choose语句

where语句就一个<where>标签, 很简单, 不再过多赘述 接下来我们来看 choose语句的使用 其实choose语句就像java里的swith语句 , 如果语句前面的生效 , 后面的就不会生效了 可以定义查询的优先级

Flutter开发效率提升1000%,Flutter Quick教程之定义构造参数和State成员变量

一个Flutter页面&#xff0c;可以定义页面构造参数和State成员变量。所谓页面构造参数&#xff0c;就是当前页面构造函数里面的参数。 比如下面代码&#xff0c;a就是构造参数&#xff0c;a1就是State成员变量。 class Testpage extends StatefulWidget {String a;const Test…

Java web应用性能分析之【jvisualvm远程连接云服务器】

Java web应用性能分析之【java进程问题分析概叙】-CSDN博客 Java web应用性能分析之【java进程问题分析工具】-CSDN博客 前面整理了java进程问题分析和分析工具&#xff0c;现在可以详细看看jvisualvm的使用&#xff0c;一般java进程都是部署云服务器&#xff0c;或者托管IDC机…