持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第29天,点击查看活动详情
一、题目与题目分析
题目
给你一个有效的 IPv4 地址 address,返回这个 IP 地址的无效化版本。
所谓无效化 IP 地址,其实就是用 "[.]" 代替了每个 "."。
(题目来源:力扣:1108.IP 地址无效化)
题目分析
有效地址IPv4转换嘛,就是把.转为[.];即把有效地址转为无效地址。
二、整体逻辑与主要代码
题目分析已经比较清楚了,接下来我们进入代码设计。
整体逻辑
先判断传入的字符串是否符合IPv4,符合则进行匹配拼接对应字符串即可。
主要代码
整体逻辑清晰了之后,同时也有较清楚的注释。直接来看代码吧! (如有不懂的或者更好的建议,欢迎评论区分享友友的看法哈~)
【1】遍历解法
class Solution {
public static String defangIPaddr(String address) {
StringBuilder sb = new StringBuilder();
if (address == null) {
return sb.toString();
}
// 前后去空
address = address.trim();
if (address.length() < 7) { // 字符串小于7(即不符合IP地址的)
return sb.toString();
}
for (char ch : address.toCharArray()) {
// 字符串转字符数组,同时进行遍历
if (ch == '.') { // 当字符为 '.'时,进行拼接
sb.append("[" + ch + "]");
} else {
// 否则,直接添加
sb.append(ch);
}
}
// 转为字符串类型
return sb.toString();
}
}
后来做完后,才注意到;题目是传入有效的IPv4地址,所以可以去掉判断是否为空、前后去空后小于7的判断。
代码如下
if (address == null) {
return sb.toString();
}
// 前后去空
address = address.trim();
if (address.length() < 7) { // 字符串小于7(即不符合IP地址的)
return sb.toString();
}
【2】替换解法
class Solution {
public String defangIPaddr(String address) {
// 直接替换
return address.replaceAll("\\.", "[.]");
}
}
【3】固定字符数组解法(执行耗时 0ms)
想着会不会有更好一些的方法,看到评论区还可以通过指定字符数组长度来做。
小改一下:
class Solution {
public static String defangIPaddr(String address) {
// +6对应三个“.”的“[”和“]”
char[] charArr = new char[address.length() + 6]; // 根据传入地址长度+6,定义指定长度数组;节省空间
int j = 0;
for (char ch : address.toCharArray()) {// 字符串转字符数组,同时进行遍历
if (ch != '.') {
charArr[j++] = ch;
} else {
charArr[j++] = '[';
charArr[j++] = ch;
charArr[j++] = ']';
}
}
// 转为字符串类型
return String.valueOf(charArr);
}
}
三、结果展示
【1】结果展示
【3】结果展示
四、人生总结
题目数据库
Gitee:传送门
文章小尾巴
文章写作、模板、文章小尾巴可参考:《写作“小心思”》
感谢你看到最后,最后再说两点~
①如果你持有不同的看法,欢迎你在文章下方进行留言、评论。
②如果对你有帮助,或者你认可的话,欢迎给个小点赞,支持一下~
我是南方者,一个热爱计算机更热爱祖国的南方人。
(文章内容仅供学习参考,如有侵权,非常抱歉,请立即联系作者删除。)