【LeetCode】1108. IP 地址无效化

image.png

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第27天,点击查看活动详情

测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。

怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~

一、题目描述:

  • 题目内容

    image.png

  • 题目示例

    image.png

  • 题目解析

    • 给出的 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地址基础知识进行回顾后,我们来完成今天的题目。解答该题直接使用模拟方法:

  1. 对IP地址中找出字符.
  2. 对字符.进行替换成字符[.]
  • 方法一: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)
    
  • 方法三:replace使用

    • 直接使用字符串replace方法对字符.替换成字符[.]
    class Solution(object):
        def defangIPaddr(self, address):
            newaddress = address.replace(".","[.]")
            return newaddress
    

三、总结:

本题考察字符串中字符替换过程,可以直接使用Python内置库replace方法,一行代码实现,三种方法对比,replace效率最高,AC提交记录如下:

image.png

扫描二维码关注公众号,回复: 14305781 查看本文章
  • 时间复杂度O(n),n为字符串长度
  • 空间复杂度O(1)

以上是本期内容,欢迎大佬们点赞评论,下期见~~~~

猜你喜欢

转载自juejin.im/post/7111892430277836837