【算法学习】1108. IP 地址无效化(java / c / c++ / python / go / rust)
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 地址
分析
这道算法题二当家的相信大家都能做出来,我好像也没有什么可说的。
题意翻译过来其实就是把
.
全都替换成[.]
。除了
C
和C++
的题解可以重点看下之外,其他的基本都是用了语言自带的API。
题解
java
class Solution { public String defangIPaddr(String address) { return address.replace(".","[.]"); } } 复制代码
c
提示中说输入的 address
是一个有效的 IPv4 地址,这就意味着一定有三个 .
需要替换成 [.]
,可以知道返回结果比输入参数多6个字符,strlen
返回的长度不含字符串末尾隐藏字符 '\0'
。
char * defangIPaddr(char * address){ int n = strlen(address); char *ans = malloc(n + 7); for (int i = 0, j = 0; i < n; ++i) { if (address[i] == '.') { ans[j++] = '['; ans[j++] = '.'; ans[j++] = ']'; } else { ans[j++] = address[i]; } } ans[n + 6] = '\0'; return ans; } 复制代码
c++
没找到一次性替换全部的API,这里是逆序去替换的,为什么呢?如果是正序,替换以后 .
的位置会向后移动,就需要移动下标,否则会死循环。
class Solution { public: string defangIPaddr(string address) { for (int i = address.size(); i >= 0; --i) { if (address[i] == '.') { address.replace(i, 1, "[.]"); } } return address; } }; 复制代码
python
class Solution: def defangIPaddr(self, address: str) -> str: return address.replace('.', '[.]') 复制代码
go
func defangIPaddr(address string) string { return strings.ReplaceAll(address, ".", "[.]") } 复制代码
rust
impl Solution { pub fn defang_i_paddr(address: String) -> String { address.replace(".", "[.]") } } 复制代码
作者:二当家的白帽子
链接:https://juejin.cn/post/7026556887113924616