\(\color{Red}{KMP板子}\)

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e6+9;
int la,lb,j,kmp[maxn];
char a[maxn],b[maxn];
int main()
{
cin>>a+1>>b+1;
la=strlen(a+1),lb=strlen(b+1);
for(int i=2;i<=lb;i++)//第一为默认为0
{
while(j&&b[i]!=b[j+1]) j=kmp[j];
//ABCA的相同前后缀是A,如果想再增加
//必须再添加一个B,也就是b[j+1]位置要等于b[i]
if(b[j+1]==b[i]) j++;
kmp[i]=j;
}
j=0;
for(int i=1;i<=la;i++)
{
while(j&&b[j+1]!=a[i]) j=kmp[j];
if(b[j+1]==a[i]) j++;
if(j==lb)
{
cout<<i-lb+1<<endl;
j=kmp[j];//找到后开始找下一个
}
}
for(int i=1;i<=lb;i++) cout<<kmp[i]<<" ";
}

\(\color{Red}{Tire树板子}\)

struct node{
int zi[27];
}tire[maxn];int isok[maxn],tot;
void insert(string s)
{
int now=0,len=s.length();
for(int i=0;i<len;i++)
{
int ch=s[i]-'a'+1;
if(!tire[now].zi[ch])
tire[now].zi[ch]=++tot;
now=tire[now].zi[ch];
}
isok[now]=1;//此节点是一个字串
}
bool ask(string s)
{
int now=0,len=s.length();
for(int i=0;i<len;i++)
{
int ch=s[i]-'a'+1;
if(!tire[now].zi[ch]) return false;
now=tire[now].zi[ch];
}
return true;
}

最新文章

  1. 在Windows上安装Elasticsearch 5.0
  2. c++中的内存空间不足和自定义处理内存不足
  3. XmlReader读取XML
  4. 【HDU】2147 kiki&#39;s game
  5. 有些网站为什么要使用CDN,CDN又是什么呢
  6. 剑指架构师系列-Struts2的缓存
  7. 《redis-php中文参考手册》
  8. CodeForces 429 B B. Working out
  9. oracle数据库驱动(ojdbc)
  10. View的getMeasuredWidth和getWidth有什么区别?
  11. Apache 和 Tomcat联系和区别
  12. 2016年3月9日Android实习日记
  13. PHP测试Mysql数据库连接
  14. 委托 匿名 lambda表达式
  15. PHP 数据运算类型都有哪些?
  16. C++获取文件夹下所有文件名
  17. 20145127 《Java程序设计》第四次实验报告
  18. MVC3控制器方法获取Form数据方法
  19. ORM(Object Relational Mapping)框架
  20. UML类图简单说明,学习编程思路的必会技能

热门文章

  1. python-从酷狗下载爬取自己想要的音乐-可以直接拿来体验哟
  2. leetcode Perform String Shifts
  3. 自己总结 :并发队列ConcurrentLinkedQueue、阻塞队列AraayBlockingQueue、阻塞队列LinkedBlockingQueue 区别 和 使用场景总结
  4. Java类锁和对象锁实践和内部私有锁关联
  5. [转] [知乎] Roguelite 和 Roguelike 的区别是什么?
  6. Git敏捷开发--stash命令
  7. C++ 11 +,开坑。
  8. 简单了解下CAP定理与BASE定理
  9. 全国315个城市,用python爬取肯德基老爷爷的店面信息
  10. java 8 stream中的Spliterator简介