题解 | #合法IP#

合法IP

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

解题思路:

  • *切割为数组,其长度不等于4,不是IPV4
  • 某个元素+开头,不是IPV4
  • 某个元素0开头却长度大于1,不是IPV4

以下代码中多次用到match,是为了清晰地表示以上判断。

use std::io::{self, *};

fn main() {
    let stdin = io::stdin();
    for line in stdin.lock().lines() {
        let ll = line.unwrap();
        let v = ll.trim().split(".").collect::<Vec<&str>>();
        let mut is_ipv_4 = true;
        match v.len() {
            0..=3 | 5..=usize::MAX => is_ipv_4 = false,
            _ => {
                for &i in v.iter() {
                    is_ipv_4 = match i.get(0..1) {
                        Some("0") => match i.len() {
                            2..=usize::MAX => false,
                            _ => true,
                        },
                        Some("+") => false,
                        _ => {
                            let e = i.trim().parse::<u32>().unwrap_or(256);
                            match e {
                                0..=255 => true,
                                _ => false,
                            }
                        }
                    };
                    if !is_ipv_4 {
                        break;
                    }
                }
            }
        }
        match is_ipv_4 {
            true => println!("YES"),
            false => println!("NO"),
        }
    }
}
用 Rust 刷华为机试HJ 文章被收录于专栏

用 Rust 刷 HJ100 题,只需要懂基础 Rust 语法就能看懂

全部评论

相关推荐

12-24 20:46
武汉大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务