| 每日一题做题记录,参考官方和三叶的题解 |
- 题目要求
- 思路一:模拟遍历
- Java
- C++
- Rust
- 思路二:模拟+内置函数替换
- Java
- C++
- Rust
- 总结
- 需要额外定义一个返回值字符串,将 a d d r e s s address address中的字符填入,遇到.则填入 [ . ] [.] [.]。
class Solution {
public String defangIPaddr(String address) {
StringBuilder sb = new StringBuilder();
for (char a : address.toCharArray()) {
if (a == '.')
sb.append("[.]");
else
sb.append(a);
}
return sb.toString();
}
}
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( n ) O(n) O(n)
class Solution {
public:
string defangIPaddr(string address) {
string res;
for (auto &a : address) {
if (a == '.')
res.append("[.]");
else
res.push_back(a);
}
return res;
}
};
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( n ) O(n) O(n)
impl Solution {
pub fn defang_i_paddr(address: String) -> String {
let mut res = String::new();
for a in address.chars() {
if a == '.' {
res.push_str("[.]");
}
else {
res.push(a);
}
}
res
}
}
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( n ) O(n) O(n)
- 流氓解法来了,熟悉字符串操作就会知道有replace函数,直接调用结束。
class Solution {
public String defangIPaddr(String address) {
return address.replace(".", "[.]");
}
}
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( 1 ) O(1) O(1)
- STL库也有replace函数,但是不能实现本题,它有两个功能:
- 将指定单个字符替换为其他单个字符;
- 替换指定位置、指定长度的字符。
impl Solution {
pub fn defang_i_paddr(address: String) -> String {
address.replace(".", "[.]")
}
}
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( 1 ) O(1) O(1)
简单模拟~
了解了一下各种语言的replace函数,尤其是C++这个麻烦精。
| 欢迎指正与讨论! |



