KMP+差分 文章过滤器 (filter)
Description
给定一些短串,要求你在一个长串中,将这些短串部分变为\(*\)
Input
第一行包括一个整数\(n\),表示短串的数量.
接下来的\(n\)行,为\(n\)个短串.
最后一行,为你需要变化的长串.
Output
一行,表示变化后的长串.
PS:长串会有中有各种字符,短串仅包含英文字符
样例输入
3
int
ing
kitty
Int is interesting! ~OwO~
样例输出
\(***\) is \(***\)erest\(***\)ing! ~OwO~
上面的一些输入输出中为全角,实际上为半角.
这题做法有很多啊,可以哈希,可以AC自动机,可以KMP.
这里讲一下KMP算法.
做法为\(KMP+\)差分.
首先需要将长串中的字母全部转为小写(大写).
\(isalpha\)吼啊
我们对每一个短串求出其\(next\)数组.再枚举这些串去和长串匹配.
但是一些位置会出问题.
比如
给定两个短串为\(GRE\)和\(eat\),长串为\(Great\)
则我们的长串要变成\(*****\)
因此引入了差分.
如果匹配上之后,我们直接对其左端点和右端点\(+1\)差分。
最终枚举的话,直接判断有无标记,如果有,则将当前位置变为\(*\)
然后直接输出即可.
代码
#include<cstdio>
#include<cctype>
#include<cstring>
#define R register
using namespace std;
char sta[150008],stb[150008];
int pos[150008],k,n,len;
struct cod
{
int nex[55],len;
char s[55];
}str[55];
char st[55],c;
inline char ch(char s)
{
if(!isalpha(s))return s;
if(s<='Z' and s>='A')s=s-'A'+'a';
return s;
}
int main()
{
scanf("%d",&n);
for(R int i=1;i<=n;i++)
{
scanf("%s",st+1);
str[i].len=strlen(st+1);
for(R int j=1;j<=str[i].len;j++)
str[i].s[j]=ch(st[j]);
str[i].nex[1]=0;k=0;
for(R int j=2;j<=str[i].len;j++)
{
while(str[i].s[k+1]!=str[i].s[j] and k)k=str[i].nex[k];
if(str[i].s[k+1]==str[i].s[j])k++;
str[i].nex[j]=k;
}
}
getchar();
while(c!='\n')
{
c=getchar();
if(c=='\n')break;
sta[++len]=c;
stb[len]=ch(c);
}
for(R int i=1;i<=n;i++)
{
k=0;
for(R int j=1;j<=len;j++)
{
while(k and str[i].s[k+1]!=stb[j])k=str[i].nex[k];
if(str[i].s[k+1]==stb[j])k++;
if(k==str[i].len)
{
pos[j-str[i].len+1]++;
pos[j+1]--;
}
}
}
for(R int i=1;i<=len;i++)
{
pos[i]+=pos[i-1];
if(pos[i])sta[i]='*';
printf("%c",sta[i]);
}
}
/*
2
GRE
eat
Great Britain
***** Britain
*/
KMP+差分 文章过滤器 (filter)的更多相关文章
- ASP.NET没有魔法——ASP.NET MVC 过滤器(Filter)
上一篇文章介绍了使用Authorize特性实现了ASP.NET MVC中针对Controller或者Action的授权功能,实际上这个特性是MVC功能的一部分,被称为过滤器(Filter),它是一种面 ...
- SpringBoot系列教程web篇之过滤器Filter使用指南扩展篇
前面一篇博文介绍了在 SpringBoot 中使用 Filter 的两种使用方式,这里介绍另外一种直接将 Filter 当做 Spring 的 Bean 来使用的方式,并且在这种使用方式下,Filte ...
- SpringBoot系列教程web篇之过滤器Filter使用指南
web三大组件之一Filter,可以说是很多小伙伴学习java web时最早接触的知识点了,然而学得早不代表就用得多.基本上,如果不是让你从0到1写一个web应用(或者说即便从0到1写一个web应用) ...
- springCloud学习05之api网关服务zuul过滤器filter
前面学习了zuul的反向代理.负载均衡.fallback回退.这张学习写过滤器filter,做java web开发的对filter都不陌生,那就是客户端(如浏览器)发起请求的时候,都先经过过滤器fil ...
- Spring中过滤器(Filter)和拦截器(Interceptor)的区别和联系
在我们日常的开发中,我们经常会用到Filter和Interceptor.有时同一个功能.Filter可以做,Interceptor也可以做.有时就需要考虑使用哪一个比较好.这篇文章主要介绍一下,二者的 ...
- Angularjs在控制器(controller.js)的js代码中使用过滤器($filter)格式化日期/时间实例
Angularjs内置的过滤器(filter)为我们的数据信息格式化提供了比较强大的功能,比如:格式化时间,日期.格式化数字精度.语言本地化.格式化货币等等.但这些过滤器一般都是在VIEW中使用的,比 ...
- 网站过滤器Filter
实际上,Filter与Servlet及其相似,区别只是FIlter的doFilter()方法里多了一个FilterChain的参数,通过该参数可以控制是否放行用户的请求.网站有了过滤器十分的方便,可以 ...
- paip.输出内容替换在Apache 过滤器filter的设置
paip.输出内容替换在Apache 过滤器filter的设置 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog ...
- java Servlet中的过滤器Filter
web.xml中元素执行的顺序listener->filter->struts拦截器->servlet. 1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ...
随机推荐
- android 与 小米1S刷机学习
本文内容为本博客作者原创,转载请注明出处或者发私信. [名词] 1.ROM包 :安卓手机系统,以.ZIP结尾,类似windows的 win7系统包,300M-700M不止 2.卡刷(Recovery模 ...
- [洛谷P1131][ZJOI2007]时态同步
题目大意:给你一棵树,每条边有边权,要求增加一些边的边权,使得根节点到每个叶子节点的距离相等,求出最少共增加多少边权. 题解:树形$DP$,对于每个点,如果它到它的子树中的叶子节点距离不同,一定要在这 ...
- 【BZOJ 1770 】 [Usaco2009 Nov]lights 燈 dfs+异或方程组
这道题明显是异或方程组,然而解不一定唯一他要的是众多解中解为1的数的最小值,这个时候我们就需要dfs了我们dfs的时候就是枚举其有不确定解的数上选0或1从而推知其他解,由于我们dfs的时候先0后1,虽 ...
- Vim使用小记(一)常用操作
By francis_hao Sep 22,2016 vim的功能自然不止如此,这里只是把日常使用频率较高的记录下来,若想了解vim的全部功能可查阅其帮助手册:help,或者查询指定命令的用法: ...
- yum命令Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
yum命令Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY 博客分类: linux 三种解决方案 我采取第三种方案解决的 第一种: linu ...
- cglib
参考:http://blog.csdn.net/zhoudaxia/article/details/30591941 <!-- https://mvnrepository.com/artifac ...
- MyBatis对象关联关系---- association与collection
Mybatis处理“一对多”的关系时,需要用到associasion元素.处理”多对一“用collection元素来实现(这两个元素在之前mapper文件中提到过). 本例子中,假设一名User可以有 ...
- Drupal7所见即所得模块CKEditor
初学Drupal(7.26),刚好遇到一个需要用到CKEditor模块的项目,于是就摸索着把它给装上了. 图片上传出问题 回到Drupal7的管理页面后刚好发现了对于CKEditor的“状态报告”(错 ...
- KMP算法_模板_C++
这个博客讲得非常优秀,可惜它是Java版本的 http://blog.csdn.net/yutianzuijin/article/details/11954939/ a 为匹配串,b 为目标串 通俗讲 ...
- hdu 3374 String Problem (kmp+最大最小表示法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3374 题目大意:输出最大和最小的是从哪一位开始的,同时输出最小循环节的个数. 这里简单介绍对字符串最小 ...