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

来源:力扣(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();
    }

猜你喜欢

转载自blog.csdn.net/qq_37079157/article/details/109389392