题目大意
http://hihocoder.com/problemset/problem/1289
此题是微软2016校园招聘4月在线笔试的第二题。给出一系列ip和mask的规则,让你判断一个新的ip是allow还是deny。注意的是,有些输入条件没有mask,也就是全部匹配(mask=32),匹配规则是按照最先匹配的原则而不是最长匹配,当没有规则匹配上时返回allow。
题目分析
思路参考了这篇文章https://glatue.wordpress.com/2016/04/12/hihocoder-1289-403-forbidden/
比较明显的用trie树来处理前缀匹配,注意数据量是在10万,处理ip转换时要用高效率的位操作而不要用字符串转换处理.
每个树节点存储当前行号line,是为了最后查找时候找最上面的一行,也就是最先匹配原则。还要存储是否允许,当然该值仅当为word节点才有效,其它节点的isAllow没有意义。还要注意根节点的line和isAllow也是有意义的,保存那些mask值为0的ip,当没有匹配到任何叶节点当然就直接返回根节点的isAllow值
代码
|
|
时间复杂度O(n*len)