Problem Description

一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?

Input

输入中含有一些数据,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少种花样。花纹条和小饰条不会超过1000个字符长。如果遇见#字符,则不再进行工作。

Output

输出能从花纹布中剪出的最多小饰条个数,如果一块都没有,那就老老实实输出0,每个结果之间应换行。

Sample Input

abcde a3
aaaaaa aa
#

Sample Output

0
3

这是一道简单题有很多种做法在这只介绍kmp这种方法。
操作代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define maxx 1010
char a[maxx],b[maxx];
int p[maxx],n,m;
void pre()//求p[]数组;
{
p[]=;
int j=;
for(int i=;i<m;i++)
{
while(j>&&b[j+]!=b[i+])
j=p[j];
if(b[j+]==b[i+])
j++;
p[i+]=j;
}
}
int kmp()//匹配过程
{
int ans=,j=;
for(int i=;i<n;i++)
{
while(j>&&b[j+]!=a[i+])
j=p[j];
if(b[j+]==a[i+])
j++;
if(j==m)
{
ans++;
j=;//从头开始匹配,保证不重叠;
}
}
return ans; }
int main()
{
while(cin>>a+)//a+1表示读入的字符串串首为a[1];
{
if(a[]=='#')break;
cin>>b+;
m=strlen(b+);
n=strlen(a+);
pre();
cout<<kmp()<<endl;
}
return ;
}

下面来一道求重叠部分的题目
Oulipo POJ - 3461(kmp,求重叠匹配个数)

最新文章

  1. problem-eclipse创建maven项目报错
  2. C#-WinForm-MDI窗体容器、权限设置
  3. dandelion datatables : Page index must not be less than zero!
  4. 自制jquery可编辑的下拉框
  5. [Linux] yum和apt-get用法及区别
  6. iOS耳机操作
  7. 开发工具IDEA的使用
  8. JNI 从C文件向Java文件传递多个参数
  9. html的空格显示距离问题
  10. (大数据工程师学习路径)第四步 SQL基础课程----修改和删除
  11. android中自定义shape
  12. python基础(二)- 字符串
  13. 常见Android面试题及答案(详细整理)
  14. 201521123044 《Java程序设计》第13周学习总结
  15. [自用]多项式类数学相关(定理&amp;证明&amp;板子)
  16. mysql 合并left join 数据条目
  17. leetcode刷题笔记231 2的幂
  18. git bash 支持中文
  19. js工具库---Lodash
  20. python模块:json

热门文章

  1. HTML基础要点归纳
  2. saltstack运维工具
  3. 数据库安装后无法访问且mysql重启报错的解决方法
  4. js的dom测试及实例代码
  5. legend3---14、所有增删改的前置操作可以是什么
  6. 设置django 时间
  7. python爬虫简单实现,并在java中调用python脚本,将数据保存在json文件中
  8. Flask之加载静态资源
  9. springboot之kafka安装与实践
  10. 【MYSQL】存储过程示例