持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第27天,点击查看活动详情
测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。
怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~
一、题目描述:
-
题目内容
-
题目示例
-
题目解析
- 给出的
address
是一个有效的 IPv4 地址
- 给出的
二、思路分析:
我们拿到本题,是一个关于计算网络IP地址的,扫一遍题目get到题目要求是对IPv4地址中字符.进行替换成[.],使IP地址无效。本题的难点是简单级别的,题目为了降低难度,给出的IPv4的地址是有效的。
老实说,IPV4的地址有什么特点,之前学的已经忘记差不多了。借此题,来温顾一下计算机网络关于IP地址的哪些事。
-
什么是IP地址?
- IP地址的全称是互联网络协议地址(Internet Protocol Address)
- 规范全球网络Internet传输地址格式的标准协议
-
IP地址有几种?
- IP地址主要分为IPV4和IPV6两种。
- IPv4:是最早出现的,主要四段数字组成,每一段最大不超过255,长度为32字节,形式为a.b.c.d
- IPV6:是对IPV4的补充,是下一代版本的互联网协议,长度为128字节
-
IPV4地址分类
- IPv4作为目前最常用的地址,主要分为公有地址和私有地址
- 公有地址:需要向Inter NIC申请注册的,通过该地址可以访问互联网
- 私有地址:仅限组织机构内部使用(局域网),A类(10.0.0.0 ~ 10.255.255.255)B类地址(172.16.0.0 ~ 172.31.255.255) C类地址(192.168.0.0 ~ 192.168.255.255)
-
IP地址编码方式
类别 最大网络数 IP地址范围 最高位 A 126(2^7-2) 1.0.0.1~127.255.255.254 0 B 16384(2^14) 128.0.0.1~191.255.255.254 10 C 2097152(2^21) 192.0.0.1~223.255.255.254 110 D 多播地址 224.0.0.1~239.255.255.254 1110 E 保留为今后使用 240.0.0.1~255.255.255.254 1111
对IP地址基础知识进行回顾后,我们来完成今天的题目。解答该题直接使用模拟方法:
- 对IP地址中找出字符
.
- 对字符
.
进行替换成字符[.]
-
方法一:for循环遍历字符串
- 定义临时变量来存储新的字符串newaddress
- 使用for循环遍历address地址中字符,遇到字符
.
则添加为[.]
def defangIPaddr(self, address): """ :type address: str :rtype: str """ newaddress = "" for i in range(len(address)): if address[i] == ".": newaddress +="[.]" else: newaddress += address[i] return newaddress
-
方法二:split/insert使用
- 使用split函数,对address字符串按字符
.
分隔成列表 - 然后再使用for循环,间隔2步insert添加[.]到列表中
class Solution(object): def defangIPaddr(self, address): """ :type address: str :rtype: str """ newaddress = address.split(".") for i in range(1,7,2): newaddress.insert(i,"[.]") return "".join(newaddress)
- 使用split函数,对address字符串按字符
-
方法三:replace使用
- 直接使用字符串replace方法对字符
.
替换成字符[.]
class Solution(object): def defangIPaddr(self, address): newaddress = address.replace(".","[.]") return newaddress
- 直接使用字符串replace方法对字符
三、总结:
本题考察字符串中字符替换过程,可以直接使用Python内置库replace方法,一行代码实现,三种方法对比,replace效率最高,AC提交记录如下:
- 时间复杂度O(n),n为字符串长度
- 空间复杂度O(1)
以上是本期内容,欢迎大佬们点赞评论,下期见~~~~