题目:http://ybt.ssoier.cn:8088/problem_show.php?pid=1465

题目思路:KMP模板题,该说的都在代码里

#include<bits/stdc++.h>
using namespace std;
int nexT[1001],t0,p0;
string t,p;
int KMP(string n,int n0,string m,int m0){
int i=0,j=0,k=0;
while(i<n0){
if(j==-1||n[i]==m[j]){
//如果是在字符串开始或者主子串字符对上了
++i;
++j;
//i,j一起走
if(j==m0){//如果全对完了
i=i+m0-1;
//更新以下i
k++;
//子串数+1
}
}
else{
//否则
j=nexT[j];
//二营长,你他娘的next数组呢
}
}
return k;
//返回字符数量
}
void hnext(string o,int o0){//寻找next数组
int j=0,k=-1;
nexT[j]=k;//先把next[0]变成-1
//如果第一个对上的数字就不对
//那么只动j是不可能找到成功的串的
//所以把他变成-1就是做一个信号
//让程序知道“我需要动i”这件事
while(j<o0){//数组不超限制是肯定的
if(k==-1||o[j]==o[k]){
nexT[++j]=++k;
//如果k是-1
//那么就证明前面连个屁的对应都没有
//甚至可能连字符都没有
//再往前倒腾也不太现实
//那就只能向后来一位
//即next[j+1]=k+1
//那如果我们现在看到的两个字符相同
//比如:
//A C D A C D C
// k j j+1
//那么前面是一一对应的
//就是k和k前面的东西
//和k+1~j的地方已经对过了
//能和k+1~j对上的主串部分
//就一定能和0~k的部分对上
//所以如果在j+1的地方出了岔子
//那就可以直接把0~k忽略
//直接k+1一步到位
//所以此时next[j+1]=k+1
}
else{
//如果不相等了
//比如:
//A B A C D A B A B C
// k j j+1
//每一个循环的宗旨都是求出next[j+1]
//所以j的位置不能动,但是还对不上
//所以就要单独动k
//也就是调整移动的长度
//这就需要我们调整开始的位置
//匹配长度会不可避免的变小
//但无论k怎么变
//它都会在我们已经对应好的串里
//通俗地说
//是在用前缀的前缀匹配后缀的后缀
//而在那个已经匹配出来的串子里
//是有一个更短也能100%对的缀的
//它的串尾的下标就是next[k]
//那直接让他滚过去不就得了
k=nexT[k];
}
}
}
int main(){
while(1){
cin>>t;//输入主串
if(t=="#"){//结束了
break;//再见
}
cin>>p;//输入子串
t0=t.size();
p0=p.size();
hnext(p,p0);//把对应的next找出来
printf("%d\n",KMP(t,t0,p,p0));
//算完输出
}
return 0;
}

 




016(剪花布条)(KMP)的更多相关文章

  1. HDU 2087 - 剪花布条 - [KMP算法]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2087 Time Limit: 1000/1000 MS (Java/Others) Memory Li ...

  2. HDU 2087 剪花布条 (KMP 不允许重叠的匹配)

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

  3. hdu 2087剪花布条 (KMP入门 子串出现的次数和子串个数)

    剪花布条 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  4. C - 剪花布条 (KMP例题)

    一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?  Input输入中含有一些数据,分别是成对出现的花布条和 ...

  5. HDU 2087 剪花布条(字符串匹配,KMP)

    HDU 2087 剪花布条(字符串匹配,KMP) Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出 ...

  6. (KMP)剪花布条 -- hdu -- 2087

    http://acm.hdu.edu.cn/showproblem.php?pid=2087 剪花布条 Time Limit: 1000/1000 MS (Java/Others)    Memory ...

  7. HDU 2087 剪花布条 (简单KMP或者暴力)

    剪花布条 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  8. 「LOJ#10043」「一本通 2.2 例 1」剪花布条 (KMP

    题目描述 原题来自:HDU 2087 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? 输入格式 输入数据 ...

  9. HDU-2087 剪花布条 字符串问题 KMP算法 查匹配子串

    题目链接:https://cn.vjudge.net/problem/HDU-2087 题意 中文题咯 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条, ...

  10. 剪花布条 --HDOJ 2087

    剪花布条 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

随机推荐

  1. JVM内存管理面试常见问题全解

    目录 一.什么是JVM 1.jvm的三个组成部分 二.类加载系统 1.类的加载过程 2.类加载器 三.双亲委派机制 1.双亲委派机制介绍 2.为什么要双亲委派机制 3.双亲委派机制的核心源码 4.全盘 ...

  2. Java包装类,基本的装箱与拆箱

    我的博客 何为包装类 将原始类型和包装类分开以保持简单.当需要一个适合像面向对象编程的类型时就需要包装类.当希望数据类型变得简单时就使用原始类型. 原始类型不能为null,但包装类可以为null.包装 ...

  3. vscode 开发项目, Prettier ESLint的配置全攻略(基础篇)

    我们在做项目尤其是多人合作开发的时候经常会因为不同的开发规范和代码风格导致出现冲突, 为了能统一代码风格和规范我们需要使用到prettier和eslint,接下来就一vscode编辑器为例详细讲解下: ...

  4. 聊聊如何在华为云IoT平台进行产品开发

    摘要:华为云物联网平台承载着南北向数据互通的功能职责. 本文分享自华为云社区<如何基于华为云IoT物联网平台进行产品开发>,作者: Super.雯 . 华为云物联网平台承载着南北向数据互通 ...

  5. 【ACM程序设计】并查集

    并查集 并查集(Union-find Sets)是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题.一些常见的用途有:求连通子图.求最小生成树的Kruskal算法和求最近公共祖先( ...

  6. 【Azure Developer】使用 Microsoft Authentication Libraries (MSAL) 如何来获取Token呢 (通过用户名和密码方式获取Access Token)

    问题描述 在上一篇博文<[Azure Developer]使用 adal4j(Azure Active Directory authentication library for Java)如何来 ...

  7. 项目:Six Sigma

    六西格玛管理(Six Sigma Management)是20世纪80年代末首先在美国摩托罗拉公司发展起来的一种新型管理方式.推行六西格玛管理就是通过设计和监控过程,将可能的失误减少到最低限度,从而使 ...

  8. 165. Compare Version Numbers - LeetCode

    Question 165. Compare Version Numbers Solution 题目大意: 比较版本号大小 思路: 根据逗号将版本号字符串转成数组,再比较每个数的大小 Java实现: p ...

  9. Java获取特定区间随机数及产生不重复随机数

    问题 有这样一种需求,在这样一个数组中String[] arr = new String[]{"电商", "互联网", "小程序", &qu ...

  10. iTextSharp 提取签名图像

    原文 本文使用 iTextSharp 5.5.13.2,记录使用 iTextSharp 提取图片时,获得的知识点. pdf 中的签名并不是单纯的一张图片,它是由一张基础的底色图和一张蒙版图片组成.需要 ...