小米 牛客 ipv4地址白名单 set暴力

题目描述
我们的小齐同学是一名很辛苦的实习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

说白了就一个set的使用

string line;
set<string> s;
while(cin >> line && line[0] != 'e') {
	const char* ptr = line.data() + 2;
	if(line[0] == 'i') {
		s.insert(ptr);
		cout << "ok" << endl;
	} else if(line[0] == 's') {
		cout << (s.count(ptr) ? "true" : "false") << endl;
	} else {
		s.erase(ptr);
		cout << "ok" << endl;
	}
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
11-20 19:57
已编辑
某大厂 golang工程师 23.0k*16.0, 2k房补,年终大概率能拿到
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务