Java&C++题解与拓展——leetcode1108.IP地址无效化【不同语言的字符串的replace】

139 阅读1分钟
每日一题做题记录,参考官方和三叶的题解

题目要求

在这里插入图片描述

思路一:模拟遍历

  • 需要额外定义一个返回值字符串,将addressaddress中的字符填入,遇到.则填入[.][.]

Java

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)

C++

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)

Rust

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)

思路二:模拟+内置函数替换

  • 流氓解法来了,熟悉字符串操作就会知道有replace函数,直接调用结束。

Java

class Solution {
    public String defangIPaddr(String address) {
        return address.replace(".", "[.]");
    }
}
  • 时间复杂度:O(n)O(n)
  • 空间复杂度:O(1)O(1)

C++

  • STL库也有replace函数,但是不能实现本题,它有两个功能:
    • 将指定单个字符替换为其他单个字符;
    • 替换指定位置、指定长度的字符。

Rust

impl Solution {
    pub fn defang_i_paddr(address: String) -> String {
        address.replace(".", "[.]")
    }
}
  • 时间复杂度:O(n)O(n)
  • 空间复杂度:O(1)O(1)

总结

简单模拟~

了解了一下各种语言的replace函数,尤其是C++这个麻烦精。


欢迎指正与讨论!