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