LeetCode第468题 - 验证IP地址

2024-01-28 11:04
文章标签 leetcode ip 验证 地址 468

本文主要是介绍LeetCode第468题 - 验证IP地址,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目

编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址。

IPv4 地址由十进制数和点来表示,每个地址包含4个十进制数,其范围为 0 - 255, 用(“.”)分割。比如,172.16.254.1;

同时,IPv4 地址内的数不会以 0 开头。比如,地址 172.16.254.01 是不合法的。

IPv6 地址由8组16进制的数字来表示,每组表示 16 比特。这些组数字通过 (“:”)分割。比如, 2001:0db8:85a3:0000:0000:8a2e:0370:7334 是一个有效的地址。而且,我们可以加入一些以 0 开头的数字,字母可以使用大写,也可以是小写。所以, 2001:db8:85a3:0:0:8A2E:0370:7334 也是一个有效的 IPv6 address地址 (即,忽略 0 开头,忽略大小写)。

然而,我们不能因为某个组的值为 0,而使用一个空的组,以至于出现 (:😃 的情况。 比如, 2001:0db8:85a3::8A2E:0370:7334 是无效的 IPv6 地址。

同时,在 IPv6 地址中,多余的 0 也是不被允许的。比如, 02001:0db8:85a3:0000:0000:8a2e:0370:7334 是无效的。

说明: 你可以认为给定的字符串里没有空格或者其他特殊字符。

示例 1:

输入: “172.16.254.1”

输出: “IPv4”

解释: 这是一个有效的 IPv4 地址, 所以返回 “IPv4”。
示例 2:

输入: “2001:0db8:85a3:0:0:8A2E:0370:7334”

输出: “IPv6”

解释: 这是一个有效的 IPv6 地址, 所以返回 “IPv6”。
示例 3:

输入: “256.256.256.256”

输出: “Neither”

解释: 这个地址既不是 IPv4 也不是 IPv6 地址。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/validate-ip-address
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解答

class Solution {public String validIPAddress(String IP) {if (IP == null || IP.isEmpty()) {return "Neither";}String value1 = IP.trim();if (value1.isEmpty()) {return "Neither"; }java.util.regex.Pattern pipv4 = java.util.regex.Pattern.compile("((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])");java.util.regex.Matcher matcher = null;matcher = pipv4.matcher(IP);if (matcher.matches()) {return "IPv4";}String value2 = IP.toLowerCase(java.util.Locale.US);java.util.regex.Pattern pipv6 = java.util.regex.Pattern.compile("([0-9a-f]{1,4}(\\:)){7}([0-9a-f]{1,4})");matcher = pipv6.matcher(value2);if (matcher.matches()) {return "IPv6";}return "Neither";}
}

要点
使用正则表达式,本题非常容易。

准备的用例,如下

	@Testpublic void test101() {assertEquals("Neither", new L468().validIPAddress(null));assertEquals("Neither", new L468().validIPAddress(""));assertEquals("Neither", new L468().validIPAddress("		"));assertEquals("IPv4", new L468().validIPAddress("172.16.254.1"));assertEquals("IPv4", new L468().validIPAddress("0.0.0.0"));assertEquals("IPv4", new L468().validIPAddress("255.255.255.255"));assertEquals("IPv4", new L468().validIPAddress("0.255.255.255"));assertEquals("Neither", new L468().validIPAddress("256.256.256.256"));assertEquals("Neither", new L468().validIPAddress("-1.255.255.255"));assertEquals("Neither", new L468().validIPAddress("1.255.255.01"));assertEquals("Neither", new L468().validIPAddress("1.255.255"));}@Testpublic void test102() {assertEquals("Neither", new L468().validIPAddress("2001:0db8:85a3::8A2E:0370:7334"));assertEquals("Neither", new L468().validIPAddress("2001:0db8:85a3:0000:0000:8a2e:0370"));assertEquals("IPv6", new L468().validIPAddress("2001:0db8:85a3:0:0:8A2E:0370:7334"));assertEquals("IPv6", new L468().validIPAddress("0:0db8:85a3:0:0:8A2E:0370:7334"));assertEquals("IPv6", new L468().validIPAddress("2001:db8:85a3:0:0:8A2E:0370:7334"));assertEquals("IPv6", new L468().validIPAddress("2001:0db8:85a3:0000:0000:8a2e:0370:7334"));}

这篇关于LeetCode第468题 - 验证IP地址的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/653457

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

哈希leetcode-1

目录 1前言 2.例题  2.1两数之和 2.2判断是否互为字符重排 2.3存在重复元素1 2.4存在重复元素2 2.5字母异位词分组 1前言 哈希表主要是适合于快速查找某个元素(O(1)) 当我们要频繁的查找某个元素,第一哈希表O(1),第二,二分O(log n) 一般可以分为语言自带的容器哈希和用数组模拟的简易哈希。 最简单的比如数组模拟字符存储,只要开26个c

常用的jdk下载地址

jdk下载地址 安装方式可以看之前的博客: mac安装jdk oracle 版本:https://www.oracle.com/java/technologies/downloads/ Eclipse Temurin版本:https://adoptium.net/zh-CN/temurin/releases/ 阿里版本: github:https://github.com/

leetcode-24Swap Nodes in Pairs

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode swapPairs(L

leetcode-23Merge k Sorted Lists

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode mergeKLists

webapp地址

F:\LSP\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

easyui同时验证账户格式和ajax是否存在

accountName: {validator: function (value, param) {if (!/^[a-zA-Z][a-zA-Z0-9_]{3,15}$/i.test(value)) {$.fn.validatebox.defaults.rules.accountName.message = '账户名称不合法(字母开头,允许4-16字节,允许字母数字下划线)';return fal