LC 468. 验证IP地址
题目描述
这是 LeetCode 上的 468. 验证IP地址 ,难度为 中等。
给定一个字符串 queryIP
。如果是有效的 IPv4
地址,返回 "IPv4"
;如果是有效的 IPv6
地址,返回 "IPv6"
;如果不是上述类型的 IP
地址,返回 "Neither"
。
有效的 IPv4
地址 是 “x1.x2.x3.x4”
形式的 IP
地址。 其中$ 0 <= x_i <= 255$ 且 $x_i$ 不能包含 前导零。
例如: “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 <= x_i.length <= 4$
- $x_i$ 是一个 十六进制字符串 ,可以包含数字、小写英文字母(
'a'
到'f'
)和大写英文字母('A'
到'F'
)。 - 在 $x_i$ 中允许前导零。
例如 "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:
1 |
|
示例 2:
1 |
|
示例 3:
1 |
|
提示:
queryIP
仅由英文字母,数字,字符'.'
和':'
组成。
模拟
为了方便,我们称合法 IPv4
/IPv6
中由 .
/:
分割的部分称为 item
。
无论是 IPv4
还是 IPv6
,我们都只需将连续段的 item
取出,并结合题意判断即可,一个较为简单的方式使用 split
操作来得到所有的 item
,考虑到某些语言并不内置 split
,这里采取双指针的方式来做。
为方便大家理解,今天将题解文字说明写到注释中。
代码:
1 |
|
- 时间复杂度:$O(n)$
- 空间复杂度:使用
toCharArray
操作会产生新数组,复杂度为 $O(n)$,使用charAt
操作代替复杂度为 $O(1)$
最后
这是我们「刷穿 LeetCode」系列文章的第 No.468
篇,系列开始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道题目,部分是有锁题,我们将先把所有不带锁的题目刷完。
在这个系列文章里面,除了讲解解题思路以外,还会尽可能给出最为简洁的代码。如果涉及通解还会相应的代码模板。
为了方便各位同学能够电脑上进行调试和提交代码,我建立了相关的仓库:https://github.com/SharingSource/LogicStack-LeetCode 。
在仓库地址里,你可以看到系列文章的题解链接、系列文章的相应代码、LeetCode 原题链接和其他优选题解。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!