【HDU】2087 剪花布条 (KMP算法的应用)
可以参考:从头彻尾彻底理解KMP
可以用朴素的模式匹配算法,也可以使用KMP算法,KMP算法所用的时间较短
普通版
#include <iostream>
#include <string>using namespace std;int main ()
{string s1,s2;while(cin >> s1){if(s1=="#")return 0;cin >> s2;int i=0;int j=0;int cnt=0;while(i<s1.length()){if(s1[i]==s2[j]){i++;j++;}else{i=i-j+1;//将i向后移动一个,继续匹配j=0;}if(j==s2.length()){j=0;cnt++;}}cout << cnt << endl;}return 0;
}
KMP
#include <iostream>
#include <string>
#include <cstring>using namespace std;int nextt[1005];
string s1,s2;
int cnt;void getnext()
{memset(nextt,0,sizeof(nextt));int i=0,j=-1;nextt[0]=-1;while(i<s2.length()){if(j==-1 || s2[j]==s2[i]){i++;j++;nextt[i] = j;}else{j=nextt[j];}}
}void KMP_search()
{int i=0,j=0;while(i<s1.length()){if(j==-1||s1[i]==s2[j]){i++;j++;}else{j=nextt[j];}if(j==s2.length()){j=0;cnt++;}}
}int main()
{while(cin>>s1){if(s1=="#")break;cin >> s2;getnext();cnt=0;KMP_search();cout << cnt << endl;}return 0;
}
在这里需要注意,在KMP算法匹配成功时,i已经指向匹配成功的下一个字符,而 j 等于模式串的长度(已经指出去了),所以想要继续往后匹配的话,j=0,而不是j=next[j](这样计算的是可重叠的,例如,aaaaaa aa,输出的是5,答案要求是3)。
【HDU】2087 剪花布条 (KMP算法的应用)相关推荐
- HDU 2087 剪花布条 KMP入门
Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条.计算一下能从花布条中尽可能剪出几块小饰条来呢? Input 输入 ...
- HDU 2087剪花布条 KMP
KMP算法入门题 哥第一次写KMP惭愧啊,惭愧getnext写得蛋痛,后面的KMP部分更蛋痛.改了N久 #include<stdio.h> #include<string.h> ...
- Day 33 剪花布条+客似云来
目录 1.剪花布条 2.客似云来 1.剪花布条 链接:剪花布条__牛客网 来源:牛客网 [编程题]剪花布条 热度指数:1327 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M, ...
- (剪花布条、客似云来)笔试强训
博主简介:想进大厂的打工人 博主主页:@xyk: 所属专栏: JavaEE初阶 两道编程题~~~ 目录 文章目录 一.[编程题]客似云来 二.[编程题]剪花布条 一.[编程题]客似云来 链接:客似云来 ...
- 【Java版oj】day33剪花布条、客似云来
目录 一.剪花布条 (1)原题再现 (2)问题分析 (3)完整代码 二.客似云来 (1)原题再现 (2)问题分析 (3)完整代码 一.剪花布条 (1)原题再现 剪花布条__牛客网 一块 ...
- 【HDU - 2087】 剪花布条(直接模拟 or KMP)
题干: 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Input输入中含有一些数据,分别是成对出现的花 ...
- 剪花布条(字符串,C++)
题目描述 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? 输入格式 输入数据为多组数据,读取到 # 字符 ...
- hdu2087 剪花布条 暴力/KMP
在字符串中不可重叠地寻找子串数量,暴力/KMP 1 #include<stdio.h> 2 #include<string.h> 3 4 int main(){ 5 char ...
- hdu 2087 剪花布条
http://acm.hdu.edu.cn/showproblem.php?pid=2087 水题,注意细节就可以了. 代码如下: #include<iostream> #include& ...
最新文章
- 高级教程: 作出动态决策和 Bi-LSTM CRF 重点
- SQLServer之函数简介
- 谷歌官方TensorFlow开发者认证来了,吴恩达:学我的课,报名费五折
- windows7 64位下安装tensorflow终极解决方案
- 【maven3学习之三】maven构建一个简单的Hello World
- python 线程超时设置_python 条件变量Condition(36)
- Java技术:serialVersionUID作用介绍
- rest api封装调用_如何从云功能调用外部REST API
- 解决Hbase输入list,创建表报错,输入status可以,org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: S
- vue 开发中element-ui库的switch开关绑定number类型数据不成功问题 解决方法
- typedef用法总结(一)
- 【luogu T34117 打油门】 题解
- 如何批量新建文件夹并命名
- 适合小孩接触编程起步的几款软件,从游戏中学习编程
- 游戏角色设计思路规划路径有哪些?
- ECCV 2020 五项大奖出炉!普林斯顿邓嘉获最佳论文奖
- u3d学习:helloworld
- IMU输出的角度、角速度、加速度信息的坐标系
- 如何加密html文件怎么打开,文件加密巧用IE浏览器
- 一名大学毕业生的反思(转)