系统设计题-路由表最长匹配

一、题目

路由表最长匹配:将目标IP地址dstIP与路由为entryIP/掩码长度m(比如10.166.50.0/23)进行匹配,找出匹配掩码m最长值。
匹配规则
如果dstIP和entryIP的二进制表示的前m个位相同,则说明是匹配的。
0.0.0.0是默认路由,与任何dstIP均匹配,m值为0。
所有匹配的路由中,m的最大值即为“最长匹配”

二、样例

第一行是dstIP
第二行是总entryIP数
第三行之后是具体的entryIP/m

192.168.0.3
6
10.166.50.0/23
192.0.0.0/0
10.255.255.255/32
192.168.0.1/24
127.0.0.0/0
192.168.0.0.0/24
输出
192.168.0.1/24

三、代码实现

    // ipTable是个二维数组,每一个数组中第0列存IP,第1列存掩码private static String routeSearch(String dstIp, String[][] ipTable) {String dstIpBinary = getRoute(dstIp);LinkedList<String> maxMatchList = new LinkedList<>();int maxMatch = -1;for (String[] strings : ipTable) {String tempRoute = strings[0];int maxNum = Integer.parseInt(strings[1]);if (tempRoute.equals("0.0.0.0") && maxNum == 0) {maxMatch = maxNum;maxMatchList.add(tempRoute + "/" + maxNum);continue;}if (isMatch(dstIpBinary, getRoute(tempRoute), maxNum) && maxNum > maxMatch) {maxMatchList.clear();maxMatch = maxNum;maxMatchList.add(tempRoute + "/" + maxNum);}}if (maxMatchList.isEmpty()) {return "empty";}return maxMatchList.getFirst();}// 判断在给定matchNum长度下,是否匹配private static boolean isMatch(String src, String ds, int matchNum) {for (int i = 0; i < matchNum; i++) {if (src.charAt(i) != ds.charAt(i)) {return false;}}return true;}// 将IP地址转换成二进制private static String getRoute(String s) {String[] ipSplit = s.split("\\.");StringBuilder stringBuilder = new StringBuilder();for (String ip : ipSplit) {// 转换成二进制,不足8位,则补0String binaryString = Integer.toBinaryString(Integer.parseInt(ip));String formatBinaryStr = String.format("%8s", binaryString);formatBinaryStr = formatBinaryStr.replace(" ", "0");stringBuilder.append(formatBinaryStr);}return stringBuilder.toString();}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/44783.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抖音必备工具!掌握萤瓴优选橱窗带货软件的五大优势,助你快速盈利

在当今数字化时代&#xff0c;抖音作为一款备受欢迎的短视频社交平台&#xff0c;不仅为人们提供了展示自我的舞台&#xff0c;更成为了众多商家和个人创业者推广产品和服务的重要渠道。然而&#xff0c;要在抖音上实现高效带货&#xff0c;并非易事。幸运的是&#xff0c;萤瓴…

技校专业群的生成机制研究

一、引言 随着我国经济的快速发展和产业结构的不断优化&#xff0c;技术型人才的需求日益旺盛。技工学校&#xff08;简称技校&#xff09;作为培养技术型人才的摇篮&#xff0c;其专业群的构建与发展显得尤为重要。专业群作为技校战略发展的核心&#xff0c;不仅能够优化教学…

Python 脚本编写指南:从框架到实践

一、引言 Python 作为一种强大且易于学习的编程语言&#xff0c;在各个领域都有着广泛的应用。编写 Python 脚本是实现各种功能和任务的常见方式。 二、Python 脚本框架的基本组成部分 导入必要的模块 在脚本的开头&#xff0c;我们通常需要导入所需的 Python 模块&#xff…

大模型之战进入新赛季,开始卷应用

最近一段时间&#xff0c;国产大模型Kimi彻底火了&#xff0c;而这波爆火&#xff0c;某种意义上也展示了一个问题&#xff0c;即大模型的落地场景可能比技术比拼&#xff0c;更重要。 国产大模型Kimi突然爆火&#xff0c;与Kimi相关的产业链甚至被冠上“Kimi概念股”之名&…

【初阶数据结构】树与二叉树:从零开始的奇幻之旅

初阶数据结构相关知识点可以通过点击以下链接进行学习一起加油&#xff01;时间与空间复杂度的深度剖析深入解析顺序表:探索底层逻辑深入解析单链表:探索底层逻辑深入解析带头双向循环链表:探索底层逻辑深入解析栈:探索底层逻辑深入解析队列:探索底层逻辑深入解析循环队列:探索…

day10:03 一文搞懂encode和encoding的区别

在Python中&#xff0c;处理字符串时经常会遇到encode()方法和encoding参数&#xff0c;它们都与字符串的编码和解码有关&#xff0c;但用途和上下文有所不同。下面通过案例来解释它们的关系和区别。 1. encode() 方法 encode()方法是字符串&#xff08;str&#xff09;类型的…

《简历宝典》08 - 简历中“教育背景”模块如何扬长避短

目录 1 本文概述 2 必须写的信息 3 学历的优势凸显 4 专业的重要性 5 如果所学专业与当前求职的职位不匹配 6 在校期间获得的奖项和证书 7 最后 1 本文概述 前两节我们把个人信息模块做了拆分讲解&#xff0c;分为必写的信息项和根据个人情况酌情添加的信息项&#xff0…

51单片机:如何使用串口波特率计算器及其详解

目录 一、如何使用串口波特率计算器 1.以此为例: 2.生成代码如下: 3.需要手动配置中断系统 1.原理图 2.配置代码 二、如何理解软件生成的波特率 1.以该代码为例子进行分析 2.串口模式图 三、如何计算波特率 参考STC89C52手册P235 四、如何调用串口中断函数 一、如何…

HBase 在统一内容平台业务的优化实践

作者&#xff1a;来自 vivo 互联网服务器团队-Leng Jianyu、Huang Haitao HBase是一款开源高可靠性、扩展性、高性能和灵活性的分布式非关系型数据库&#xff0c;本文围绕数据库选型以及使用HBase的痛点展开&#xff0c;从四个方面对HBase的使用进行优化&#xff0c;取得了一些…

36. Adam 算法详解

Adam&#xff08;Adaptive Moment Estimation&#xff09;是一种结合动量法和自适应学习率的优化算法&#xff0c;自2014年提出以来&#xff0c;迅速成为深度学习中最流行和常用的优化算法之一。Adam算法的核心思想是利用梯度的一阶动量和二阶动量来动态调整学习率&#xff0c;…

基于jeecgboot-vue3的Flowable流程-集成仿钉钉流程(五)仿钉钉流程的json数据保存与显示

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、需要做一个界面保存与显示仿钉钉的流程&#xff0c;先建一个表&#xff0c;用online建 2、通过上面生成代码&#xff0c;放入到相应的前后端工程里 3、修改前端仿钉钉流程的设计功能&a…

spark基于Spark的对招聘信息的分析与设计-计算机毕业设计源码50716

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2 系统分析 2.1 可行性分析 2.2.1 数据新增流程 2.2.2 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 系统总体设计 3.1 系统架构设…

Vue2/Vue3实现全局/局部添加防篡改水印的效果。删除元素无效!更改元素属性无效!支持图片、元素、视频等等。

水印目的 版权保护:水印可以在图片、文档或视频中嵌入作者、品牌或版权所有者的信息,以防止未经授权的复制、传播或使用。当其他人使用带有水印的内容时,可以追溯到原始作者或版权所有者,从而加强版权保护。 身份识别:水印可以用作作者或品牌的标识符,使观众能够轻松识…

springboot对ZonedDateTime返回结果json是string-源码分析

springboot对ZonedDateTime返回结果json是string-源码分析 application/json格式默认使用ObjectMapper实例进行序列化ObjectMapper自动注入分析springboot关于jackson配置 java.time.ZonedDateTime application/json格式默认使用ObjectMapper实例进行序列化 controller返回后&…

人形机器人的理想与现实

李开复曾提到过一个AI界流传的“骗子又来了曲线”。 人会不断给机器进行“是否具有人类智能”的鉴定&#xff0c;而这个过程&#xff0c;总是从被人工智能在某些领域的惊艳表现震撼&#xff0c;到逐渐认识到当时的人工智能还有各种局限&#xff0c;以至于产生巨大心理落差。 近…

html js 3d z轴移动 实现星空

用chatgpt还有kimi 让实现动画效果的星空,都太垃圾了 不是y轴移动,就是x轴移动, 我要z轴移动,他们就是搞不出来, ai写代码还有很长的路。 <!DOCTYPE html> <meta charset="utf-8" /> <head> <title>ai相关博客</title> </h…

【操作系统】手把手带你搭建DNS服务器!

DNS服务器 DNS服务器指域名系统或者域名服务。域名系统为Internet上的主机分配域名地址和IP地址&#xff0c;用户使用域名地址&#xff0c;该系统就会自动把域名地址转为IP地址。域名服务是运行域名系统的Internet工具。执行域名服务的服务器称之为DNS服务器&#xff0c;通过DN…

51单片机嵌入式开发:8、 STC89C52RC 操作LCD1602原理

STC89C52RC 操作LCD1602原理 1 LCD1602概述1.1 LCD1602介绍1.2 LCD1602引脚说明1.3 LCD1602指令介绍 2 LCD1602外围电路2.1 LCD1602接线方法2.2 LCD1602电路原理 3 LCD1602软件操作3.1 LCD1602显示3.2 LCD1602 protues仿真 4 总结 1 LCD1602概述 1.1 LCD1602介绍 LCD1602是一种…

maven——(重要)手动创建,构建项目

创建项目 手动按照maven层级建好文件夹&#xff0c;并写上java&#xff0c;测试代码和pom文件 构建项目 在dos窗口中执行如下命令 compile编译 当前maven仓库中什么都没有。 在pom所在层级下&#xff0c;执行&#xff1a; mvn compile 就开始显示下面这些&#xff0c;…

数据库-ubuntu环境下安装配置mysql

文章目录 什么是数据库&#xff1f;一、ubuntu环境下安装mysql二、配置mysql配置文件1.先登上root账号2.配置文件的修改show engines \G; mysql和mysqld数据库的基础操作登录mysql创建数据库显示当前数据库使用数据库创建表插入students表数据打印students表数据select * from …