题解 | #合法IP#

合法IP

http://www.nowcoder.com/practice/995b8a548827494699dc38c3e2a54ee9

题目的主要信息:

根据题目,我们判断ip地址是否合法,判断是否合法的检查标准是每段数字的范围在0-255。

方法一:

从字符串中提取出四段数字,然后判断每个数字是否在0-255之间,如果有一个数字越界了,那这个ip地址就是非法的。 alt 具体做法:

#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
    string str;
    while(getline(cin,str))
    {
        stringstream ss(str);
        string temp;
        bool flag=true;
        int count=0;//用于统计部分数
        while(getline(ss,temp,'.'))
        {
            int num=atoi(temp.c_str());
            if((num!=0&&temp[0]=='0')||!isdigit(temp[0])){//每一部分不能含有其他符号
                flag=false;
            }else{
                if(num>255||num<0){
                flag=false;
                break;
                }
                count++;
            }
        }
        if(flag&&(count==4)) cout<<"YES"<<endl;//有四个部分且每一部分数字合法
        else cout<<"NO"<<endl;
    }
    return 0;
}

复杂度分析:

  • 时间复杂度:O(1)O(1),每检查一个ip地址,只判断四段数字的范围是否合法,只需常数时间。
  • 空间复杂度:O(1)O(1),只用了常数空间。

方法二:

直接用正则表达式匹配。

具体做法:

#include<iostream>
#include<string>
#include<regex>
using namespace std;

int main(){
    string str;
    regex pattern("((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)\.){3}((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d))");//匹配0.0.0.0-255.255.255.255的正则表达式
    while(getline(cin, str)){
        if(regex_match(str, pattern)){//正则表达式匹配成功
            cout << "YES" << endl;
        }else{
            cout << "NO" << endl;
        }
    }
    return 0;
}

复杂度分析:

  • 时间复杂度:O(1)O(1),用正则表达式匹配只需常数时间。
  • 空间复杂度:O(1)O(1),只用了常数空间。
全部评论

相关推荐

感性的干饭人在线蹲牛友:🐮 应该是在嘉定这边叭,禾赛大楼挺好看的
点赞 评论 收藏
分享
11-24 00:11
已编辑
广东工业大学 算法工程师
避雷深圳&nbsp;&nbsp;yidao,试用期&nbsp;6&nbsp;个月。好嘛,试用期还没结束,就直接告诉你尽快找下一家吧,我谢谢您嘞
牛客75408465号:笑死,直属领导和 hr 口径都没统一,各自说了一些离谱的被裁理由,你们能不能认真一点呀,哈哈哈哈哈😅😅😅
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务