Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[LeetCode] 1108. Defanging an IP Address #1108

Open
grandyang opened this issue May 30, 2019 · 0 comments
Open

[LeetCode] 1108. Defanging an IP Address #1108

grandyang opened this issue May 30, 2019 · 0 comments

Comments

@grandyang
Copy link
Owner

grandyang commented May 30, 2019

Given a valid (IPv4) IP address, return a defanged version of that IP address.

defanged IP address  replaces every period "." with "[.]".

Example 1:

Input: address = "1.1.1.1"
Output: "1[.]1[.]1[.]1"

Example 2:

Input: address = "255.100.50.0"
Output: "255[.]100[.]50[.]0"

Constraints:

  • The given address is a valid IPv4 address.

这道题给了一个 IP 地址,让把其中的点都换成用中括号包起来的点,这种字符替换的问题,用 Java 的话可以说是太方便了,各种函数可以调用,比如 replace, join, replaceAll 等等,好用的飞起。但是很可惜博主是用的 C++,所以用不了这些函数,而是要是用字符串流类,将给定的字符串根据点的位置分开,并把每段字符串提取出来,然后加到结果 res 之后,并加上 [.],这种最终会多加一个中括号,别忘移除掉即可,参见代码如下:

解法一:

class Solution {
public:
    string defangIPaddr(string address) {
        string res, t;
        istringstream is(address);
        while (getline(is, t, '.')) {
            res += t + "[.]";
        }
        return res.substr(0, (int)res.size() - 3);
    }
};

其实不用字符串流类也可以,就是直接遍历原字符串,遇到点了,就直接把 [.] 加入,否则就加入当前字符即可,参见代码如下:

解法二:

class Solution {
public:
    string defangIPaddr(string address) {
		string res;
		for (char c : address) {
			if (c == '.') res += "[.]";
			else res += c;
		}
		return res;
    }
};

虽然前面提到了 C++ 中没有很强大的字符串替换的方法,但是这里也可以用 regex_replace 来直接进行替换,一行搞定碉堡了有木有,参见代码如下:

解法三:

class Solution {
public:
    string defangIPaddr(string address) {
        return regex_replace(address, regex("[.]"), "[.]");
    }
};

Github 同步地址:

#1108

参考资料:

https://leetcode.com/problems/defanging-an-ip-address/

https://leetcode.com/problems/defanging-an-ip-address/discuss/328855/C%2B%2B-1-liner-(regex_replace)

https://leetcode.com/problems/defanging-an-ip-address/discuss/328895/JavaPython-3-3-One-liners-%2B-one-wo-lib.

LeetCode All in One 题目讲解汇总(持续更新中...)

@grandyang grandyang changed the title [LeetCode] 1108. Missing Problem [LeetCode] 1108. Defanging an IP Address May 8, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant