Problem 2122 又见LKity

Accept: 413    Submit: 1425
Time Limit: 1000 mSec    Memory Limit : 32768 KB

 Problem Description

嗨!大家好,在TempleRun中大家都认识我了吧。我是又笨又穷的猫猫LKity。很高兴这次又与各位FZU的ACMer见面了。最近见到FZU的各位ACMer都在刻苦地集训,整天在日光浴中闲得发慌的我压力山大呀!于是,我准备为诸位编写一款小工具——LKity牌文本替换(众怒,:敢不敢更土点!)。这个小工具可以帮助诸位替换代码中的变量等功能,真心是一款编程,刷题必备的神器。其功能如下:

将给定的字符序列中所有包含给定的子串替换成另外一个给定的字符串。为了让其功能更加强大,替换过程中,将忽略大小写。并且不进行递归替换操作。

不过,作为笨笨的猫猫,我是心有余而力不足呀!希望诸位ACMer能帮我实现哈。(众FZU的ACMer:”……”);

 Input

输入包含多组数据。 输入为标准输入,输入包含3行。 第一行为需要查找的字符串S1。S1仅由大写或者小写字母组成,且其长度在区间[1,,100]内。 第二行为要替换的字符串S2。S2由[32,125]的字符组成,且其长度在区间[1,100]内。 第三行为原始字符串S,S由[32,125]的字符组成。且其长度在区间[1,50,000]内。

 Output

对于每组数据,请输出替换后的字符串。

 Sample Input

abc
bc ab
aaa aaabca 333Abcc##

 Sample Output

aaa aabc aba 333bc abc##

 Source

福州大学第十届程序设计竞赛

解题思路:判断字符相等的地方处理一下。再者就是当匹配失败时候要回退j指针,回退j时要把txt前面已经失效的一段字符输出来,比如前面匹配上k个字符,这次回退后只能匹配上j个字符,那么就要把前面失效的k-j个字符输出来。

#include<stdio.h>
#include<algorithm>
#include<math.h>
#include<string.h>
#include<string>
using namespace std;
const int maxn = 1e5+200;
char p[1020],txt[maxn],rpl[1020];
int lenp, lenr, lent, fail[1020];
bool jud(char a, char b){
if(a == b){
return true;
}else{
if(a>='a'&&a<='z'){
if(b>='A'&&b<='Z'){
if(a-32 == b)
return true;
}
}
if(a>='A'&&a<='Z'){
if(b>='a'&&b<='z'){
if(a+32 == b)
return true;
}
}
}
return false;
}
void getfail(){
fail[0] = fail[1] = 0;
int i, j;
for(i = 1; i < lenp; i++){
j = fail[i];
while(j && (!jud(p[i],p[j]))) j = fail[j];
fail[i+1] = jud(p[i],p[j]) ? j+1:0;
}
}
void kmp(){
int i, j = 0, k;
for(int i = 0; i < lent; i++){
if(!jud(txt[i],p[j])){
k = j;
}
while(!jud(txt[i],p[j])){
if(j){
j = fail[j];
}
else break;
for(int kk = i-k; kk < i-k+k-j; kk++){
printf("%c",txt[kk]);
}
k = j;
}
if(jud(p[j],txt[i])) j++;
else{
printf("%c",txt[i]);
}
if(j == lenp){
for(k = 0; k < lenr; k++){
printf("%c",rpl[k]);
j = 0;
}
}
}
for(k = lent-j; k < lent; k++){
printf("%c",txt[k]);
}puts("");
}
int main(){
while(gets(p)!=NULL){
gets(rpl);
gets(txt);
lenp = strlen(p);
lenr = strlen(rpl);
lent = strlen(txt);
getfail();
kmp();
}
return 0;
} /*
ababd
kk
ababcd aab
kk
AAAB aab
kk
abaa */

  

FZU 2122 ——又见LKity——————【KMP字符串匹配】的更多相关文章

  1. FZU 2122——又见LKity——————【字符串匹配、暴力】

    Problem 2122 又见LKity Accept: 407    Submit: 1413Time Limit: 1000 mSec    Memory Limit : 32768 KB  Pr ...

  2. FZU 2122 又见LKity【字符串/正难则反/KMP/把一个字符串中某个部分替换为另一个部分】

    嗨!大家好,在TempleRun中大家都认识我了吧.我是又笨又穷的猫猫LKity.很高兴这次又与各位FZU的ACMer见面了.最近见到FZU的各位ACMer都在刻苦地集训,整天在日光浴中闲得发慌的我压 ...

  3. FZU 2122 又见LKity(KMP+返回所有匹配位置)

    基础kmp应用,找到所有匹配位置即可 #include<stdio.h> #include<string.h> #include<algorithm> #inclu ...

  4. FZU 2122 又见LKity

    直接模拟或者KMP #include <iostream> #include <string.h> #include <stdio.h> #include < ...

  5. KMP字符串匹配 模板 洛谷 P3375

    KMP字符串匹配 模板 洛谷 P3375 题意 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next.(如果 ...

  6. {Reship}{KMP字符串匹配}

    关于KMP字符串匹配的介绍和归纳,作者的思路非常清晰,推荐看一下 http://blog.csdn.net/v_july_v/article/details/7041827

  7. 洛谷P3375 - 【模板】KMP字符串匹配

    原题链接 Description 模板题啦~ Code //[模板]KMP字符串匹配 #include <cstdio> #include <cstring> int cons ...

  8. Luogu 3375 【模板】KMP字符串匹配(KMP算法)

    Luogu 3375 [模板]KMP字符串匹配(KMP算法) Description 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来 ...

  9. 洛谷P3375 [模板]KMP字符串匹配

    To 洛谷.3375 KMP字符串匹配 题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next.如果 ...

随机推荐

  1. C语言编程学习:链表的来源分析

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

  2. jQuery之方法绑定(事件注册)代码小结

    1.最直接的模式,直接将一个function对象传入方法函数,如下面的click(),好处坏处一看便知 $("#btnComfirmChooseCompany").click(fu ...

  3. C# 抽象(4)

    抽象类和普通类有区别嘛?在继承的时候,还是只能继承一次父类嘛? 答案: 抽象类除了在抽象方法和属性上面不能实现具体的代码之外和普通类没有区别.依旧符合类的基本特征.所以在继承的时候抽象类也是属于基类, ...

  4. PTA数据结构之 List Leaves

    Given a tree, you are supposed to list all the leaves in the order of top down, and left to right. I ...

  5. 墨菲定律与 IndexOutOfBoundsException(数组越界异常)

    今天维护又反馈了一问题过来,查询试卷时报数组越界异常: 2017-02-28 10:45:24,827[ERROR] HttpException[10.32.111.7:60446:2D07867BE ...

  6. 跟我一起读postgresql源码(二)——Parser(查询分析模块)

    上篇博客简要的介绍了下psql命令行客户端的前台代码.这一次,我们来看看后台的代码吧. 十分不好意思的是,上篇博客我们只说明了前台登陆的代码,没有介绍前台登陆过程中,后台是如何工作的.即:后台接到前台 ...

  7. flink学习笔记-flink实战

    说明:本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKh ...

  8. javascript阻止事件冒泡的方法

    有的时候我们需要实现这样的功能: 点击某个蒙版,该蒙版消失,但是如果点击蒙版上的某个元素,希望蒙版不消失,这就需要用到阻止事件的冒泡了 html: <div id="outer&quo ...

  9. XMAL基础

    XMAL基础(WPF编程宝典) XAML基础规则 XAML文档中的每个元素都映射为.Net类的一个实例.元素名称也完全对应于类名.例如:元素<Button>指示WPF创建Button对象 ...

  10. UVA - 11795 状压DP

    #include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #i ...