leetcode刷题详解 难度:简单 Java实现 编号1108. IP 地址无效化

本文介绍了如何将有效的IPv4地址无效化,即将每个'.'替换为'[.]'。提供了三种解法,包括使用`replace()`方法、效率较高的`StringBuilder`和效率最优的追加操作。详细解释了每种解法的原理和效率特点。
摘要由CSDN通过智能技术生成

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

1108. IP 地址无效化

给你一个有效的 IPv4 地址 address,返回这个 IP 地址的无效化版本。

所谓无效化 IP 地址,其实就是用 “[.]” 代替了每个 “.”。

示例 1:

输入:address = “1.1.1.1”
输出:“1[.]1[.]1[.]1”
示例 2:

输入:address = “255.100.50.0”
输出:“255[.]100[.]50[.]0”

提示:

给出的 address 是一个有效的 IPv4 地址

总结

我总结了一下,大概有三种解法

解法一(效率较低)

直接使用java字符串对象中的方法replace(),该解法效率最低

 public String defangIPaddr(String address) {
        return address.replace(".", "[.]");
    }
解法二(效率较优)

该解法使用了java中的StringBuilder类,它是一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。并且它实现了appendable的接口,具有了追加和插入的能力。
z 引用一个当前内容为 “start” 的字符串,
z.append(“le”) ==> “startle”,
z.insert(4, “le”) ==> “starlet”。

一句话总结: 又可变又快(效率高)的字符串

public String defangIPaddr(String address) {
        StringBuilder s = new StringBuilder(address);
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '.'){
                s.insert(i,"[");
                s.insert(i+2,"]");
                i+=2;
            }
        }
        return s.toString();
    }
解法三(效率最优)

该解法与解法二不同,使用的是追加方法append(),以下是我对该解法的理解:
java中字符串的存储是在一片连续的地址空间中,类似于数组,学过数据结构的朋友应该都知道数组的缺点,就是数组的插入删除数据的效率比较低,插入时要把插入位置之后的元素全部后移一位,时间效率是O(n2);但追加操作永远是在数组的最后进行插入,也就是说不需要后移元素,时间效率是O(n)。

总结: 追加append()方法的效率更高

public String defangIPaddr(String address) {
        StringBuilder s = new StringBuilder();
        for (int i = 0; i < address.length(); i++) {
            if (address.charAt(i) == '.'){
                s.append("[.]");
            }else {
                s.append(address.charAt(i));
            }
        }
        return s.toString();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值