由于第一个版本想复杂了,思路不是很清新,导致有些问题没有攻克,过年那些天也想了很多,还是没有解决,一直想放弃那个解决方案,可就是舍不得放弃,我做了那么多,我想了那么久,我不想重头再来,但到最后还是没有找到既高效又没有明显BUG的解决方案,最终选择放弃第一版中的解决方案,今天本想用基于撒列的搜索树的方式实现的,可写了一部分代码后发现还是有些问题,当然并不代表用基于撒列的搜索树实现有问题,只是对于我来说有点难度,就算实现了也肯定不高效,最后也放弃了搜索树这个方案。最后想到的一个方案就是本篇博客讲的方案,思路很简单,还是基于撒列,把每个关键词的第一个字作为key,把关键词作为value,把所有关键词撒列在一个Dictionary<key,value>中,由于一个关键字可能对应多个关键词,所以value其实是一个关键词集合,通过遍历要过滤的内容,与关键字字典进行匹配,匹配的话就过滤掉,由于思路简单清晰,可能出现的BUG绝对很少,实现的代码才90多行,实现关键字过滤的功能代码才90多行,看到没有!而且效率还不错,关键字和要过滤的内容都一万多字,使用的时间才10毫秒,而且这两组数据都是从记事本中读出来的。

废话真的不想再说了,看了源码之后你会觉得:我靠,原来这么简单。信不信由你,反正源码在这里。

      public string Filter(string str)
{if (string.IsNullOrEmpty(str))
{return string.Empty;
}int len = str.Length - 1;char[] sb = str.ToCharArray();bool isOK = true;for (int i = 0; i <= len; i++)
{if (keyDict.ContainsKey(str[i]))
{int j = i;foreach (string s in keyDict[str[i]])
{foreach (char c in s)
{if ( j >= len || c != str[j++])
{
isOK = false;break;
}
}if (isOK)
{for (int k = i; k < j; k++)
sb[k] = '*';
i = j;break;
}else
{
j=i;
isOK = true;
}
}
}
}return new string(sb);
}

测试截图:

作者:陈太汉

博客:http://www.cnblogs.com/hlxs/

本文转自啊汉博客园博客,原文链接:http://www.cnblogs.com/hlxs/archive/2012/01/31/2333278.html

撒列实现关键字过虑二(附源码)相关推荐

  1. 【214情人节】低调奢华有内涵的python程序猿撒狗粮的正确姿势(附源码)

    目录 一. 效果演示 1. 原图-效果图对比 2. 看出两张图片的区别了吗? 二. 代码架构 三. 功能实现 3.1 图片处理 3.2 html 使用form表单,真心话和图片文件的布局 3.3 js ...

  2. 利用wojilu框架仿一个网站的全过程(Step by Step利用wojilu框架开发网站系列二 附源码)...

    被仿的网站和仿照后的网站 被仿的网站-易读 仿照后的网站-我读 仿这个网站的目的:为了实践一下新学习的轻量级asp.net web开发框架[我记录] ,该网站比较简单,适合入门. 实现章节 章节部分, ...

  3. flink sql 知其所以然(二)| 自定义 redis 数据维表(附源码)

    感谢您的关注  +  点赞 + 再看,对博主的肯定,会督促博主持续的输出更多的优质实战内容!!! 1.序篇-本文结构 背景篇-为啥需要 redis 维表 目标篇-做 redis 维表的预期效果是什么 ...

  4. 仿酷狗音乐播放器开发日志二十一 开发动态调色板控件(附源码)

    转载请说明原出处,谢谢~~ 上一篇仿酷狗日志结束后,整个换肤功能就只剩下调色板功能没有做了,我本以为会很简单,但是研究了酷狗的调色板功能后发现不是那么简单的事情.首先看一下酷狗的调色板的样子: 我原本 ...

  5. 环信SDK 头像、昵称、表情自定义和群聊设置的实现 二(附源码)

    前言: 环信SDK 头像.昵称.表情自定义和群聊设置的实现 一(附源码) 接着上面说的,我们来说说表情,它在哪里可以自定义,怎么写,那个方法是添加表情的我们都说说,找到 ChatViewControl ...

  6. 黯然微信小程序杂记(二):小程序最新版登录并进行缓存模块的实现 附源码

    黯然微信小程序杂记(二):小程序最新版登录进行缓存模块的实现 附源码 一.功能描述 二.mine.wxml界面图片 三.mine.wxml代码 四.mine.wxss代码 五.mine.js代码 六. ...

  7. android 原生开发 3d地图 下载_arcgis api 3.x for js 入门开发系列二不同地图服务展示(附源码下载)...

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  8. VC++利用笔记本自带摄像头扫二维码功能(附源码demo)

      VC++开发常用功能一系列文章 (欢迎订阅,持续更新...) 第8章:VC++利用笔记本自带摄像头扫二维码功能(附源码demo) 源代码demo已上传到百度网盘:永久生效  ,代码实现了打开笔记本 ...

  9. 手把手教你用Python批量实现在Excel后里面新加一列,并且内容为excel 表名(附源码)...

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 打起黄莺儿,莫教枝上啼. 大家好, ...

最新文章

  1. python获取主机ip_Python 获取本地主机 hostname 和 IP 地址的简单方法
  2. jQuery的选择器分类
  3. Centos 5.5下面架设NTP服务器
  4. python多任务编程_python线程的多任务编程
  5. iOS开发 - iOS10隐私数据访问问题
  6. 国内搜索大哥iOS面试题
  7. mysql 求平方_如何用MySQL求一个范围内的完全平方数
  8. 3D计算机组装,3DMax电脑组装配置
  9. Linux查看JDK版本和安装位置
  10. CS229 Machine Learning 自学与答案
  11. 基于2018年世界杯赛事法国队夺冠进球数据分析
  12. python 多元字符多项式的展开问题
  13. 简单工厂模式在Logback源码以及JDK源码中的应用
  14. Android 悬浮窗功能的实现
  15. win10显示rpc服务器不可用,win10系统RPC服务器不可用如何处理?
  16. python上机编程报告_Python程序设计实验报告六:函数
  17. Android动态图文混排,Android控件TextView实现静态图与动态GIF图文混排
  18. 甲骨文oracle的ocp和ocm认证难不难考?
  19. JS创建对象和事件绑定
  20. 【JavaScript实现十进制转换成二进制】

热门文章

  1. 数据备份软件,BackBone,NetVault,网络存储备份,系统集成
  2. K-means聚类自定义距离计算
  3. 第7章 jQuery中的事件与动画
  4. PIE SDK图层树伙伴控件示例
  5. GCJ 2009 Round1C C Bribe the Prisoners
  6. 【Qt开发】【VS开发】【Linux开发】OpenCV、Qt-MinGw、Qt-msvc、VS2010、VS2015、Ubuntu Linux、ARM Linux中几个特别容易混淆的内容...
  7. Rabbit MQ安装配置及常见问题
  8. Android 开发资源
  9. vs2005常用快捷键
  10. R语言入门第三集 实验二:基本数据处理