首页 > 试题广场 >

ipv4地址白名单

[编程题]ipv4地址白名单
  • 热度指数:2888 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
我们的小齐同学是一名很辛苦的实习DBA,他每天的工作就是为一个帐号添加授权,今天给这200个ipv4添加授权,明天又要把这200个授权删掉,有一天小齐同学在删除授权的时候不小心把所有的授权都删了,被领导很批了一顿。痛定思痛,小齐同学开始反思他每天的工作,发现无非就是我每天要让那些ip访问数据库而已,他决定写一个效率很高的ip白名单,请帮小齐同学说一下实现思路,并用结构化编程语言(c/c++/python/golang/java等)写一个ip白名单吧,他需要这个白名单有添加ip的功能,删除ip的功能,查找这个ip在不在白名单中,以及打印白名单中的内容,以上四个功能中查找ip是否在白名单中效率一定要高。并帮小齐分析一下各个功能的时间复杂度,写的好小齐同学会请你吃饭哦。

输入描述:
每行一条输入,格式为 type:ip
type 包括 i d s 分别表示添加,删除,查找
以 end 结尾
输入最多不超过100000行


输出描述:
输出每行一条对应输入
如果是查找,成功请打印true,失败请打印false
如果是添加删除,请打印ok
示例1

输入

i:127.0.0.1
i:10.0.0.1
s:10.0.0.1
d:10.0.0.1
s:10.0.0.1
s:127.0.0.1
end

输出

ok
ok
true
ok
false
true
示例2

输入

i:127.0.0.3
i:127.0.0.3
d:127.0.0.4
s:127.0.0.3
i:127.0.0.5
d:127.0.0.5
s:127.0.0.4
i:127.0.0.4
s:127.0.0.3
d:127.0.0.4
end

输出

ok
ok
ok
true
ok
ok
false
ok
true
ok
用Map效率好像比Set高。
import java.util.HashMap;
import java.util.Scanner;

/**
 * @Date: 2020-05-04 22:54
 * @version: 1.0
 */
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        HashMap<String,Boolean> al = new HashMap<>();
        while (true){
            String s = sc.next();
            if ("end".equals(s))
                break;
            char op = s.charAt(0);
            String ip = s.substring(2, s.length());
            if (op == 'i'){
                al.put(ip,true);
                System.out.println("ok");
            }else if (op == 'd'){
                al.put(ip,false);
                System.out.println("ok");
            }else
            {
                if (al.get(ip)==null || al.get(ip)==false)
                    System.out.println(false);
                else 
                    System.out.println(true);
            }
        }
    }
}


发表于 2020-05-04 23:29:03 回复(0)
注意要是set,不能用list
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class Main {

    public static void main(String[] args) {

        Set<String> values = new HashSet<>();
        String ip;
        String op;
        String str;
        Scanner cin = new Scanner(System.in);
        while (cin.hasNext()) {
            str = cin.next();
            if (str.equals("end")) {
                return;
            }

            op = str.substring(0, 1);
            ip = str.substring(2);
            if (op.equals("i")) {
                values.add(ip);
                System.out.println("ok");
            }
            if (op.equals("s")) {
                if (values.contains(ip)) {
                    System.out.println("true");
                } else {
                    System.out.println("false");
                }
            }
            if (op.equals("d")) {
                    values.remove(ip);
                    System.out.println("ok");
            }
        }

    }
}


发表于 2019-10-05 02:01:17 回复(0)