• 【JAVA】【刷题子】1108.IP 地址无效化


    一、题目与题目分析

    题目

    给你一个有效的 IPv4 地址 address,返回这个 IP 地址的无效化版本。

      所谓无效化 IP 地址,其实就是用 "[.]" 代替了每个 "."
    示例和提示.png

      (题目来源:力扣: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();
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    后来做完后,才注意到;题目是传入有效的IPv4地址,所以可以去掉判断是否为空、前后去空后小于7的判断。

      代码如下

    		if (address == null) {
    			return sb.toString();
    		}
    		// 前后去空
    		address = address.trim();
    		if (address.length() < 7) { // 字符串小于7(即不符合IP地址的)
    			return sb.toString();
    		}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    【2】替换解法

    class Solution {
        public String defangIPaddr(String address) {
            // 直接替换
            return address.replaceAll("\\.", "[.]");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    【3】固定字符数组解法(执行耗时 0ms)

    想着会不会有更好一些的方法,看到评论区还可以通过指定字符数组长度来做。

    固定字符数组解法.png

    小改一下:

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    三、结果展示

    【1】结果展示
    结果展示1.png

    【3】结果展示

    结果展示3.png

    四、人生总结

    勿以物喜,不以己悲

    题目数据库

    Gitee:传送门

    文章小尾巴

    文章写作、模板、文章小尾巴可参考:《写作“小心思”》

      感谢你看到最后,最后再说两点~
      ①如果你持有不同的看法,欢迎你在文章下方进行留言、评论。
      ②如果对你有帮助,或者你认可的话,欢迎给个小点赞,支持一下~
      我是南方者,一个热爱计算机更热爱祖国的南方人。

      (文章内容仅供学习参考,如有侵权,非常抱歉,请立即联系作者删除。)

  • 相关阅读:
    Vue定义全局组件的三种方式
    什么是aop?
    LeetCode 2894. 分类求和并作差【数学,容斥原理】1140
    微信小程序源码获取和反编译
    Trino418版本动态加载catalog不需要重启集群修改思路及实现
    化工单元操作概念汇总
    C语言之字符串
    智能时代的蜕变:人工智能发展历程
    Springboot+RabbitMQ+ACK机制(生产方确认(全局、局部)、消费方确认)、知识盲区
    前端知识复习
  • 原文地址:https://blog.csdn.net/qq_43263647/article/details/125383868