LeetCode刷题实战468:验证IP地址
2023-04-18 15:01:45 时间
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
今天和大家聊的问题叫做 验证IP地址,我们先来看题面:
https://leetcode-cn.com/problems/validate-ip-address/
示例
示例 1:
输入:IP = "172.16.254.1"
输出:"IPv4"
解释:有效的 IPv4 地址,返回 "IPv4"
示例 2:
输入:IP = "2001:0db8:85a3:0:0:8A2E:0370:7334"
输出:"IPv6"
解释:有效的 IPv6 地址,返回 "IPv6"
示例 3:
输入:IP = "256.256.256.256"
输出:"Neither"
解释:既不是 IPv4 地址,又不是 IPv6 地址
解题
https://www.freesion.com/article/5594817898/
思路是这样的:
1.先判断是不是ipv4。
没有“.”的不是;把整个字符串以“.”分开,不是四段的不是,凡是有某一段长度大于3或者为0的不是;每一段数字判断段大小(0-255)同时判断有没有多余的前0。
2.再判断是不是ipv6
先转小写字母。没有“:”的不是;(除了“:”)出现不是数字或者不是a-f字符的不是;以“:”分开成若干段,不是8段的不是;每段长度大于4的不是。
class Solution {
public String validIPAddress(String IP) {
if(isIp4(IP)){return "IPv4";}
if(isIp6(IP)){return "IPv6";}
return "Neither";
}
public boolean isIp4(String ip){
ip=ip.trim();
if(ip.contains(".")){
for(int i=0;i<ip.length();i++){
char c=ip.charAt(i);
if(c!='.'&&!Character.isDigit(c)){return false;}
}
String ip4[]=ip.split("\.",-1);//-1表示末尾开头的到的叶算,跟进空字符串
if(ip4.length!=4){return false;}//ip4的是4段数
for(int i=0;i<4;i++){
int l=ip4[i].length();
if(l==0||l>3){return false;}//注意空数字,判断32位超范围
int shu=Integer.parseInt(ip4[i]);
if(shu>255||(shu<10&&l>1)||(shu<100&&l>2)){
//每个数字开头不能是0,除非就是0
return false;
}
}
}
else{return false;}
return true;
}
public boolean isIp6(String ip){
ip=ip.trim().toLowerCase();//防止大小写混用
if(ip.contains(":")){
for(int i=0;i<ip.length();i++){
char c=ip.charAt(i);
if(c!=':'&&!(c>='0'&&c<='9')&&!(c>='a'&&c<='f')){
return false;
}
}
String[] ip6=ip.split("\:",-1);
if(ip6.length!=8){return false;}
for(int i=0;i<8;i++){
//ip6要有8段
int l=ip6[i].length();
if(l==0||l>4){return false;}//if(l>4){return false;}
}
}
else{return false;}
return true;
}
}
好了,今天的文章就到这里 。
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击