首页 > 编程语言 >IP地址解析(算法题)

IP地址解析(算法题)

时间:2024-09-25 17:19:59浏览次数:8  
标签:return 数字 IP地址 空格 算法 ipSegment false 解析

例题讲解:例题1:IP地址解析(拼多多面试题)
给定一个字符串表示的IP地址, 如“123.92.2.34”,判断其是否合法。合法IP地址的规则如下:
a.除了空格、数字和.之外,不得包含其他字符。
b.IP地址由四个数字构成,由.分隔,每个,隔开的数字大小在0~255之间。
c.数字前后可以有空格,但中间不能有空格。比如"123.92.2.34“合法,"123.9 2.2.34"
非法。
当然,这个问题还可以继续加一些规则,让题目变得更加复杂,比如每个数字不能有前导0,但
可以为0。比如“021.3.02.34“非法,“0.2.0.33”合法。

题解(Java)

package 算法.规律题;

import java.util.Scanner;

public class IP地址解析 {
    /**
     * 例题讲解:例题1:IP地址解析
     * 给定一个字符串表示的IP地址, 如“123.92.2.34”,判断其是否合法。合法IP地址的规则如下:
     * a.除了空格、数字和.之外,不得包含其他字符。
     * b.IP地址由四个数字构成,由.分隔,每个,隔开的数字大小在0~255之间。
     * c.数字前后可以有空格,但中间不能有空格。比如"123.92.2.34“合法,"12 3.92.2.34"
     * 非法。
     * 当然,这个问题还可以继续加一些规则,让题目变得更加复杂,比如每个数字不能有前导0,但
     * 可以为0。比如“021.3.02.34“非法,“0.2.0.33”合法。
     *
     * @param args
     */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String ip = scanner.nextLine();
        System.out.println(check(ip) ? "合法" : "非法");
    }

    public static boolean check(String ip) {
        if (ip == null) {
            return false;
        }
        //分割字符串
        String[] ipSegments = ip.split("\\.");
        //判断分割后字符串是否为4部分组成
        if (ipSegments.length != 4) {
            return false;
        }
        //验证每一段是否合法
        for (int i = 0; i < 4; i++) {
            boolean isValid = checkSegment(ipSegments[i]);
            if (!isValid) return false;
        }
        return true;
    }

    private static boolean checkSegment(String ipSegment) {
        int n = ipSegment.length();
        int i = 0;
        //跳过前面空格 例如“  123”
        //chartAt(i)相当于 ipSegment【i】
        while (i < n && ipSegment.charAt(i) == ' ') {
            i++;
        }
        //字符串全为空格
        if (i == n) {
            return false;
        }

        //处理数字(将字符串转化为数字),例如”123  “
        int digit = 0;
        while (i < n && ipSegment.charAt(i) != ' ') {
            char c = ipSegment.charAt(i);
            if (c < '0' || c > '9') {//非数字字符
                return false;
            }
            // c = '1' -> 1
            digit = digit * 10 + (c - '0');
            if (digit > 255) {//数字超过225
                return false;
            }
            i++;
        }
        //后置处理,例如"123  " or "12 3"
        while (i < n) {
            char c = ipSegment.charAt(i);
            if (c != ' ') { //后面居然还有非空字符
                return false;
            }
            i++;
        }
        return true;
    }
}

标签:return,数字,IP地址,空格,算法,ipSegment,false,解析
From: https://blog.csdn.net/2301_80419036/article/details/142527930

相关文章

  • 山海优选电商平台卷轴模式订单系统核心架构解析
    山海优选卷轴模式的订单核心源码是涉及订单处理、支付、搜索、状态管理等关键功能的代码部分。由于直接提供完整的源代码可能涉及版权和隐私保护问题,我将基于参考文章中的信息,概述该模式订单核心源码的主要结构和功能点。订单核心源码概述在山海优选卷轴模式的订单系统中,订单核心源......
  • 银狐营销与电销系统深度开发解析及核心代码概览
    一、系统开发背景与概述银狐营销与电销系统是为满足现代企业高效营销与客户管理需求而量身定制的一站式解决方案。该系统集成了数据收集、清洗、分配、跟踪及安全防护等多个功能模块,旨在通过智能化手段提升营销效率与客户服务质量。本文将对银狐营销与电销系统的开发背景、主要功能......
  • 滑动窗口算法以及应用
    滑动窗口算法以及应用主要涉及以下几个关键参数和概念:窗口大小(WindowSize):这是滑动窗口的宽度,决定了窗口中包含的数据点数量。例如,如果你在处理时间序列数据,窗口大小可能定义为秒、分钟或小时的数量。窗口位置(WindowPosition):由左右边界(通常是两个指针)定义的窗口在数据序列......
  • Rust字符串类型全解析
    字符串是每种编程语言都绕不开的类型,不过,在Rust中,你会看到远比其他语言更加丰富多样的字符串类型。如下图:为什么Rust中需要这么多种表示字符串的类型呢?初学Rust时,可能无法理解为什么要这样设计?为什么要给使用字符串带来这么多不必要的复杂性?其实,Rust中对于字符串的设计,优先......
  • Leetcode 626-换座位题目解析
    1.题目编写解决方案来交换每两个连续的学生的座位号。如果学生的数量是奇数,则最后一个学生的id不交换。按 id 升序 返回结果表。 2.数据准备CreatetableIfNotExistsSeat(idint,studentvarchar(255));TruncatetableSeat;insertintoSeat(id,student)v......
  • 滑动窗口算法以及应用
    主要涉及以下几个关键参数和概念:窗口大小(WindowSize):这是滑动窗口的宽度,决定了窗口中包含的数据点数量。例如,如果你在处理时间序列数据,窗口大小可能定义为秒、分钟或小时的数量。窗口位置(WindowPosition):由左右边界(通常是两个指针)定义的窗口在数据序列中的当前位置。左指针标志着窗......
  • 算法设计与分析(数字塔问题
    目录题目——动态规划求解数字塔问题问题描述代码实现输出结果注意事项小结:题目——动态规划求解数字塔问题在这篇博客中,我们将探讨一个经典的动态规划问题:在一个金字塔形状的数字矩阵中,如何找到从顶部到底部的最大路径和。每次只能向下移动到相邻的数字,最终我们需要计算出这一最......
  • 怎么更换自己的ip地址?多种方法可实现
    在当今的数字化时代,IP地址作为我们在网络世界中的“身份证”,扮演着举足轻重的角色。然而,有时候出于隐私保护、网络安全或是访问特定服务等需求,我们可能需要更换自己的IP地址。那么,如何实现这一目标呢?本文将为你介绍多种实用的方法。1.手动设置IP地址‌具体操作‌:-进入电......
  • DNS云解析和普通解析一样吗
    在当今数字化时代,网络的稳定与高效运行至关重要。域名系统(DNS)作为互联网的基础设施之一,其解析服务的质量直接影响着用户的网络体验。近年来,DNS云解析逐渐兴起,与传统的普通解析相比,它们之间存在着显著的区别。首先,在可靠性方面,DNS云解析具有明显优势。普通解析通常依赖于单一的服务......
  • 工地扬尘自动监测识别算法、扬尘检测算法、扬尘检测算法样本标注
    在现代城市的发展过程中,环境问题日益凸显,尤其是空气质量问题。其中,扬尘作为影响空气质量的重要因素之一,其治理和监测显得尤为重要。一、应用场景1.环境保护-空气质量监测:在城市主要道路、工业园区等区域安装扬尘检测系统,实时监测空气质量,及时采取措施减少污染。-生态恢复:在生......