FZU 2122 ——又见LKity——————【KMP字符串匹配】
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
Output
Sample Input
Sample Output
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字符串匹配】的更多相关文章
- FZU 2122——又见LKity——————【字符串匹配、暴力】
Problem 2122 又见LKity Accept: 407 Submit: 1413Time Limit: 1000 mSec Memory Limit : 32768 KB Pr ...
- FZU 2122 又见LKity【字符串/正难则反/KMP/把一个字符串中某个部分替换为另一个部分】
嗨!大家好,在TempleRun中大家都认识我了吧.我是又笨又穷的猫猫LKity.很高兴这次又与各位FZU的ACMer见面了.最近见到FZU的各位ACMer都在刻苦地集训,整天在日光浴中闲得发慌的我压 ...
- FZU 2122 又见LKity(KMP+返回所有匹配位置)
基础kmp应用,找到所有匹配位置即可 #include<stdio.h> #include<string.h> #include<algorithm> #inclu ...
- FZU 2122 又见LKity
直接模拟或者KMP #include <iostream> #include <string.h> #include <stdio.h> #include < ...
- KMP字符串匹配 模板 洛谷 P3375
KMP字符串匹配 模板 洛谷 P3375 题意 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next.(如果 ...
- {Reship}{KMP字符串匹配}
关于KMP字符串匹配的介绍和归纳,作者的思路非常清晰,推荐看一下 http://blog.csdn.net/v_july_v/article/details/7041827
- 洛谷P3375 - 【模板】KMP字符串匹配
原题链接 Description 模板题啦~ Code //[模板]KMP字符串匹配 #include <cstdio> #include <cstring> int cons ...
- Luogu 3375 【模板】KMP字符串匹配(KMP算法)
Luogu 3375 [模板]KMP字符串匹配(KMP算法) Description 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来 ...
- 洛谷P3375 [模板]KMP字符串匹配
To 洛谷.3375 KMP字符串匹配 题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next.如果 ...
随机推荐
- C#Async,await异步简单介绍
C# 5.0 引入了async/await,.net framework4.5开始支持该用法 使用: 由async标识的方法必须带有await,如果不带await,方法将被同步执行 static vo ...
- WPF 控件库——轮播控件
WPF 控件库系列博文地址: WPF 控件库——仿制Chrome的ColorPicker WPF 控件库——仿制Windows10的进度条 WPF 控件库——轮播控件 WPF 控件库——带有惯性的Sc ...
- 「POJ 1741」Tree
题面: Tree Give a tree with n vertices,each edge has a length(positive integer less than 1001). Define ...
- Ext中setValue和setRawValue
Ext.getCmp('modifyStatus').setValue(record.get('status').trim()); Ext.getCmp('modifyStatus').setRawV ...
- Educational Codeforces Round 61 (Rated for Div. 2) G(线段树,单调栈)
#include<bits/stdc++.h>using namespace std;int st[1000007];int top;int s[1000007],t[1000007];i ...
- python3+Django1.11+mysql5.7 MySQL DB API Drivers
The Python Database API is described in PEP 249. MySQL has three prominent drivers that implement th ...
- Flink学习笔记:Connectors概述
本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKhaz ...
- O(n^2) 级别的排序算法
o(n^2) 的排序算法.性能那么差,为什么还要学习? 首先,它是基础,千里之行,始于足下.它编码简单,容易实现,是一些简单情景的首选,它能给我们的问题一个暴力的解法,这样的解法也许不是最优的,但是它 ...
- app.use和app.get的区别及解析
转载至:http://blog.csdn.net/wthfeng/article/details/53366169 写在前面:最近研究nodejs及其web框架express,对app.use和app ...
- 最大子树和 树形dp
题目描述 小明对数学饱有兴趣,并且是个勤奋好学的学生,总是在课后留在教室向老师请教一些问题.一天他早晨骑车去上课,路上见到一个老伯正在修剪花花草草,顿时想到了一个有关修剪花卉的问题.于是当日课后,小明 ...