前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >​LeetCode刷题实战468:验证IP地址

​LeetCode刷题实战468:验证IP地址

作者头像
程序员小猿
发布2021-12-16 11:02:04
5100
发布2021-12-16 11:02:04
举报
文章被收录于专栏:程序IT圈程序IT圈

算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !

今天和大家聊的问题叫做 验证IP地址,我们先来看题面:

https://leetcode-cn.com/problems/validate-ip-address/

示例

代码语言:javascript
复制
示例 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的不是。

代码语言:javascript
复制
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;
    }
}

好了,今天的文章就到这里 。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员小猿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 示例
  • 解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档