leetcode:468. 验证IP地址

  1. 验证IP地址
    中等
    249
    相关企业
    给定一个字符串 queryIP。如果是有效的 IPv4 地址,返回 “IPv4” ;如果是有效的 IPv6 地址,返回 “IPv6” ;如果不是上述类型的 IP 地址,返回 “Neither” 。

有效的IPv4地址 是 “x1.x2.x3.x4” 形式的IP地址。 其中 0 <= xi <= 255 且 xi 不能包含 前导零。例如: “192.168.1.1” 、 “192.168.1.0” 为有效IPv4地址, “192.168.01.1” 为无效IPv4地址; “192.168.1.00” 、 “192.168@1.1” 为无效IPv4地址。

一个有效的IPv6地址 是一个格式为“x1:x2:x3:x4:x5:x6:x7:x8” 的IP地址,其中:

1 <= xi.length <= 4
xi 是一个 十六进制字符串 ,可以包含数字、小写英文字母( ‘a’ 到 ‘f’ )和大写英文字母( ‘A’ 到 ‘F’ )。
在 xi 中允许前导零。
例如 “2001:0db8:85a3:0000:0000:8a2e:0370:7334” 和 “2001:db8:85a3:0:0:8A2E:0370:7334” 是有效的 IPv6 地址,而 “2001:0db8:85a3::8A2E:037j:7334” 和 “02001:0db8:85a3:0000:0000:8a2e:0370:7334” 是无效的 IPv6 地址。

示例 1:

输入:queryIP = “172.16.254.1”
输出:“IPv4”
解释:有效的 IPv4 地址,返回 “IPv4”
示例 2:

输入:queryIP = “2001:0db8:85a3:0:0:8A2E:0370:7334”
输出:“IPv6”
解释:有效的 IPv6 地址,返回 “IPv6”
示例 3:

输入:queryIP = “256.256.256.256”
输出:“Neither”
解释:既不是 IPv4 地址,又不是 IPv6 地址

提示:

queryIP 仅由英文字母,数字,字符 ‘.’ 和 ‘:’ 组成。

class Solution {
public:string validIPAddress(string queryIP) {if (queryIP.find('.') != string::npos) {// IPv4int last = -1;for (int i = 0; i < 4; ++i) {int cur = (i == 3 ? queryIP.size() : queryIP.find('.', last + 1));if (cur == string::npos) {return "Neither";}if (cur - last - 1 < 1 || cur - last - 1 > 3) {return "Neither";}int addr = 0;for (int j = last + 1; j < cur; ++j) {if (!isdigit(queryIP[j])) {return "Neither";}addr = addr * 10 + (queryIP[j] - '0');}if (addr > 255) {return "Neither";}if (addr > 0 && queryIP[last + 1] == '0') {return "Neither";}if (addr == 0 && cur - last - 1 > 1) {return "Neither";}last = cur;}return "IPv4";}else {// IPv6int last = -1;for (int i = 0; i < 8; ++i) {int cur = (i == 7 ? queryIP.size() : queryIP.find(':', last + 1));if (cur == string::npos) {return "Neither";}if (cur - last - 1 < 1 || cur - last - 1 > 4) {return "Neither";}for (int j = last + 1; j < cur; ++j) {if (!isdigit(queryIP[j]) && !('a' <= tolower(queryIP[j]) && tolower(queryIP[j]) <= 'f')) {return "Neither";}}last = cur;}return "IPv6";}}
};

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【蓝桥杯选拔赛真题73】Scratch烟花特效 少儿编程scratch图形化编程 蓝桥杯创意编程选拔赛真题解析

目录 scratch烟花特效 一、题目要求 编程实现 二、案例分析 1、角色分析

组件的props属性

目录 1&#xff1a;使用props的作用&#xff1a; 2&#xff1a;props自定义属性的用法&#xff1a; 3&#xff1a;集合v-bind使用自定义属性&#xff1a; 4&#xff1a;props自定义属性是只读的&#xff1a; 5&#xff1a;default默认值&#xff1a; 6&#xff1a;type值类…

ffmpeg 同时采集麦克风和摄像头并录制文件

命令 ffmpeg -f dshow -i video"Integrated Webcam" -f dshow -i audio"麦克风 (Realtek(R) Audio)" -vcodec libx264 -acodec mp3 1.mkv ffmpeg -f dshow -i video"Integrated Webcam" -f dshow -i audio"麦克风 (Realtek(R) Audio)&qu…

LeetCode哈希表:最长和谐子序列

LeetCode:哈希表&#xff1a;最长和谐子序列 题目描述 和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。 现在&#xff0c;给你一个整数数组 nums &#xff0c;请你在所有可能的子序列中找到最长的和谐子序列的长度。 数组的子序列是一个由数组派生出来的…

(Python) 特殊变量

整体 内置模块 name 用到的模块 对象 函数

掌握视频剪辑技巧:批量置入视频封面,提升视频品质

在当今数字化时代&#xff0c;视频已成为生活的重要组成部分。无论是观看电影、电视剧、综艺节目&#xff0c;还是分享个人生活、工作成果&#xff0c;视频都以其独特的魅力吸引着大众的视线。视频封面是视频内容的缩影&#xff0c;是观众对视频的第一印象。一个好的封面能吸引…

C语言面试之旅:掌握基础,探索深度(面试实战之c语言指针数组下篇)

没有什么人能一路单纯到底&#xff0c;但是要记住&#xff0c;别忘了最初的自己。 ----小新 一、引言 在C语言中&#xff0c;指针是一种特殊的数据类型&#xff0c;它存储的是内存地址。指针在C语言编程中扮演着重要的角色&#xff0c;能够有效地提高程序的效率和灵活性。理解…

ArrayList 与 顺序表 (附洗牌算法)!

曾经我也是一枚学霸&#xff0c;直到有一天想去学渣的世界看看&#xff0c;结果就找不到回去的路了。 目录 1. 线性表 2.顺序表 2.1 接口的实现 3. ArrayList简介 4. ArrayList使用 4.1 ArrayList的构造 4.2 ArrayList常见操作 4.3 ArrayList的遍历 4.4 ArrayList的扩…

Redis连接池参数过期策略慢查询日志

目录 bigKey bigKey危害 bigKey优化 连接池参数 删除策略 慢查询日志 redis.config配置 命令配置 showlog命令 bigKey bigKey危害 Redis阻塞,bigKey操作一般耗时久,Redis单线程, 其他客户端会排队等待网络拥堵,bigKey意味着每次获取需要很大流量, 假设单条数据1MB,并发…

[在不同进制下的长除法] 正整数的任意进制转换

正整数的任意进制转换 题目描述 将 p 进制 n 转换为 q 进制。p 和 q 的取值范围为【2&#xff0c;36】&#xff0c;其中&#xff0c;用到的数码按从小到大依次为&#xff1a;0&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6&#xff0c;7&…

Flutter PK jetpack compose区别和选择

Flutter诞生于Chrome团队&#xff0c;是一帮做Web的开发做的跨平台框架&#xff0c;从最开始的设计初衷&#xff0c;就是指向了跨平台这条路&#xff0c;而Compose&#xff0c;则是诞生于Android团队&#xff0c;是为了解决当前View的架构体系不能再继续适应申明式编程的范式而…

使用drawio图表,在团队中,做计划,设计和跟踪项目

使用drawio图表&#xff0c;在团队中&#xff0c;做计划&#xff0c;设计和跟踪项目 drawio是一款强大的图表绘制软件&#xff0c;支持在线云端版本以及windows, macOS, linux安装版。 如果想在线直接使用&#xff0c;则直接输入网址draw.io或者使用drawon(桌案), drawon.cn内部…

Redis中分布式锁的使用

在分布式系统中&#xff0c;如果使用JVM中的同步锁在高并发的场景下仍然会产生线程安全问题。首先我们来查看在多个服务器时为什么会产生线程安全问题&#xff0c;有这样一个案例&#xff0c;有一件商品购买规则为一个用户只能购买一次&#xff0c;如果使用同步锁锁住用户id&am…

AR助推制造业智能转型:实时远程协作与可视化引领生产创新

制造商面临着多方面的变革&#xff0c;技术的兴起催生了工业物联网&#xff08;IIoT&#xff09;&#xff0c;改变了现代工厂的外貌、系统和流程。同时&#xff0c;全球竞争压力和不断变化的员工队伍要求采用新的员工培训方法&#xff0c;并重新审视工人在工厂中的角色。尽管如…

Linux(13):例行性工作排程

例行性工程 听谓的排程是将工作安排执行的流程之意。 Linux 排程就是透过 crontab 与 at 这两个东西。 两种工作排程的方式&#xff1a; 一种是例行性的&#xff0c;就是每隔一定的周期要来办的事项&#xff1b; 一种是突发性的&#xff0c;就是这次做完以后就没有的那一种&a…

【算法】希尔排序

目录 1. 说明2. 举个例子3. java代码示例4. java示例截图 1. 说明 1.希尔排序是直接插入排序的一种改进&#xff0c;其本质是一种分组插入排序 2.希尔排序采取了分组排序的方式 3.把待排序的数据元素序列按一定间隔进行分组&#xff0c;然后对每个分组进行直接插入排序 4.随着间…

QWebChannel 是 Qt 框架中用于在 Web 页面和 Qt 应用程序之间进行通信的类

QWebChannel 是 Qt 框架中用于在 Web 页面和 Qt 应用程序之间进行通信的类。 QWebChannel 类提供了一种机制&#xff0c;使得 Web 页面可以与 Qt 应用程序进行双向通信。通过 QWebChannel&#xff0c;可以将 Qt 应用程序中的对象暴露给 Web 页面&#xff0c;并通过信号和槽机制…

大型语言模型在实体关系提取中的应用探索

如今LLM(大语言模型)的问答与生成能力已被大家所熟知&#xff0c;很多用户已经亲身体会到了LLM为工作、生活带来的变革。其实&#xff0c;作为NLP(自然语言处理)的集大成者&#xff0c;LLM能为我们提供的能力不限于此。其基本胜任传统NLP技术所能承担的所有任务。如&#xff1a…

[开题报告]基于SpringBoot的艾滋病科普平台的设计与实现

1.选题背景 艾滋病&#xff08;艾滋病毒感染与免疫缺陷综合征&#xff09;是一种严重的传染病&#xff0c;对人类的健康和社会稳定造成了极大的影响。全球范围内&#xff0c;艾滋病已经成为公共卫生领域的重大挑战之一。尽管在科学研究和医疗技术方面取得了一定进展&#xff0…

设置随机种子保证网络可复现性

原文链接&#xff1a;https://zhuanlan.zhihu.com/p/141063432 为什么使用相同的网络结构&#xff0c;跑出来的效果完全不同&#xff0c;用的学习率&#xff0c;迭代次数&#xff0c;batch size 都是一样&#xff1f;固定随机数种子是非常重要的。但是如果你使用的是PyTorch等…