基础kmp应用,找到所有匹配位置即可

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<cmath>
#include<iostream>
using namespace std;
char t[],f[],aim[];
int mark[],next[];
bool myequal(char a,char b)
{
if(a >= 'A' && a <= 'Z')
a = a-'A'+'a';
if(b >= 'A' && b<= 'Z')
b = b-'A'+'a';
if(a == b)return true;
else return false;
}
void makenext(const char *p)
{
int q,k;
int m = strlen(p);
next[] = ;
for(q = ,k = ;q < m;q++)
{
while(k > && !myequal(p[q],p[k])) k = next[k-];
if(myequal(p[q],p[k])) k++;
next[q] = k;
}
}
void kmp(const char *t,const char *p)
{
int n,m,i,q;
n = strlen(t),m = strlen(p);
makenext(p);
for(i = ,q = ;i < n;i++)
{
while(q > && !myequal(p[q],t[i])) q = next[q-];
if(myequal(p[q],t[i])) q++;
if(q == m) mark[i-m+] = ;
}
}
int main()
{
while(gets(f))
{
gets(aim);
gets(t);
memset(mark,,sizeof(mark));
memset(next,,sizeof(next));
kmp(t,f);
int lent = strlen(t),lenjump = strlen(f);
for(int i = ;i < lent;i++)
{
if(mark[i])
{
cout<<aim;
i += lenjump-;
}
else cout<<t[i];
}
cout<<endl;
}
return ;
}

FZU 2122 又见LKity(KMP+返回所有匹配位置)的更多相关文章

  1. FZU 2122 ——又见LKity——————【KMP字符串匹配】

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

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

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

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

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

  4. FZU 2122 又见LKity

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

  5. hust训练赛20160330--B - 又见LKity

    Problem 2122 又见LKity Time Limit: 1000 mSec Memory Limit : 32768 KB  Problem Description 嗨!大家好,在Templ ...

  6. KMP算法,匹配字符串模板(返回下标)

    //KMP算法,匹配字符串模板 void getNext(int[] next, String t) { int n = next.length; for (int i = 1, j = 0; i & ...

  7. hihocoder 1015 KMP(找多个位置的 【*模板】)

    #1015 : KMP算法 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在 ...

  8. KMP算法——字符匹配

     暴力匹配: 假设现在我们面临这样一个问题:有一个文本串S,和一个模式串P,现在要查找P在S中的位置,怎么查找呢? 如果用暴力匹配的思路,并假设现在文本串S匹配到 i 位置,模式串P匹配到 j 位置, ...

  9. 整数数组的定义,然后输入一个整数X,假定X不在这个数组,返回小于X位置的最大数目i而超过X位置的最小数目j

    //整数数组的定义,然后输入一个整数x,假定X不在这个数组,返回小于X位置的最大数目i而超过X位置的最小数目j: //如果X在该阵列,返回位置的阵列中的数. 资源: #include<iostr ...

随机推荐

  1. selenium+firefox时每次都要导入数据解决方法解决方法:

    火狐录制组件:selenium-ide-2.9.0.xpiselenium1调试c#前要运行服务器 selenium-server-standalone-2.47.1.jar导入引用压缩包seleni ...

  2. 理解 php 中& 引用

    php中引用&的真正理解-变量引用.函数引用.对象引用 php的引用(就是在变量或者函数.对象等前面加上&符号) //最重要就是 删除引用的变量 ,只是引用的变量访问不了,但是内容并没 ...

  3. luci 随笔

    entry()函数, 第一个参数是定义菜单的显示(Virtual path). 第二个参数定义相应的处理方式(target). alias是指向别的entry的别名,from调用的某一个view,cb ...

  4. centos中jdk配置

    为了搭建jenkins环境,我这里必须先要配置jdk,我的系统环境时centos6.5,首先申明的是我系统是新系统,没有安装过jdk 我这里准备的安装包是jdk-7u80-linux-x64.gz. ...

  5. getReadableDatabase 和 getWritableDatabase的区别

    (1)getWritableDatabase()方法以读写方式打开数据库.一旦数据库的磁盘空间满了,数据库就只能读而不能写,此时用getWritableDatabase()打开数据库就会出错. (2) ...

  6. PHP之输出控制 ob_start(),ob_get_contents(),ob_end_clean()

    1.常用函数 ob_start();#打开输出缓冲区 ob_get_contents();#获取缓冲区内容 ob_get_length();#获取缓冲区内容长度 ob_clean();#清除之前的所有 ...

  7. MySQL事件【转载】

    在系统管理或者数据库管理中,经常要周期性的执行某一个命令或者SQL语句.对于linux系统熟悉的人都知道linux的cron计划任务,能很方便地实现定期运行指定命令的功能.Mysql在5.1以后推出了 ...

  8. Hibernate 关系映射方式(1)

    来源:本文转载自:http://blog.csdn.net/huangaigang6688/article/details/7761310 Hibernate映射解析——七种映射关系 首先我们了解一个 ...

  9. 【转】Xshell 十个技巧

    原文:http://www.cnblogs.com/wanhl/archive/2012/10/17/2727607.html 一.帐号密码保存.可以保存多个vps登陆信息,免去每次输入的烦恼. 二. ...

  10. php 四种基础算法 ---- 选择排序法

    2. 选择排序法: 选择排序法思路: 每次选择一个相应的元素,然后将其放到指定的位置 代码: function select_sort($arr) {//实现思路 双重循环完成,外层控制轮数,当前的最 ...