博客
关于我
HDU2087,1686 KMP
阅读量:154 次
发布时间:2019-02-28

本文共 3378 字,大约阅读时间需要 11 分钟。

这两题都是统计一个字符串中另一个字符串的数量,只不过一题可以重叠,另一题不能重叠。

在代码上出了输入格式,也就是一个语句的区别,其实就是找到了一个文本串和模式串匹配的子串之后,是不是从模式串开头重新找的区别。

第一题AC代码:

/* * @Author: hesorchen * @Date: 2020-07-02 22:19:34 * @LastEditTime: 2020-07-11 12:49:56 * @Description: https://hesorchen.github.io/ */#include #include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define endl '\n'#define PI acos(-1)#define PB push_back#define ll long long#define INF 0x3f3f3f3f#define mod 1000000007#define pll pair
#define lowbit(abcd) (abcd & (-abcd))#define max(a, b) ((a > b) ? (a) : (b))#define min(a, b) ((a < b) ? (a) : (b))#define IOS \ ios::sync_with_stdio(false); \ cin.tie(0); \ cout.tie(0);#define FRE \ { \ freopen("in.txt", "r", stdin); \ freopen("out.txt", "w", stdout); \ }inline ll read(){ ll x = 0, f = 1; char ch = getchar(); while (ch < '0' || ch > '9') { if (ch == '-') f = -1; ch = getchar(); } while (ch >= '0' && ch <= '9') { x = (x << 1) + (x << 3) + (ch ^ 48); ch = getchar(); } return x * f;}//==============================================================================ll nxt[1000010];char a[1000010], b[1000010];void get_nxt(){ ll lenb = strlen(b); int j = 0, k = -1; nxt[0] = -1; while (j < lenb) { if (k == -1 || b[j] == b[k]) nxt[++j] = ++k; else k = nxt[k]; }}int KMP(){ ll lenb = strlen(b), lena = strlen(a), res = 0; get_nxt(); ll i = 0, j = 0; while (i < lena) { if (j == -1 || a[i] == b[j]) i++, j++; else j = nxt[j]; if (j == lenb) { res++; // 能不能重复 // j = nxt[j]; j = 0; } } return res;}int main(){ IOS; ll n; while (cin >> a) { if (a[0] == '#') break; cin >> b; cout << KMP() << endl; } return 0;}/*ababaaba*/

第二题AC代码:

/* * @Author: hesorchen * @Date: 2020-07-02 22:19:34 * @LastEditTime: 2020-07-11 12:58:25 * @Description: https://hesorchen.github.io/ */#include #include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define endl '\n'#define PI acos(-1)#define PB push_back#define ll long long#define INF 0x3f3f3f3f#define mod 1000000007#define pll pair
#define lowbit(abcd) (abcd & (-abcd))#define max(a, b) ((a > b) ? (a) : (b))#define min(a, b) ((a < b) ? (a) : (b))#define IOS \ ios::sync_with_stdio(false); \ cin.tie(0); \ cout.tie(0);#define FRE \ { \ freopen("in.txt", "r", stdin); \ freopen("out.txt", "w", stdout); \ }inline ll read(){ ll x = 0, f = 1; char ch = getchar(); while (ch < '0' || ch > '9') { if (ch == '-') f = -1; ch = getchar(); } while (ch >= '0' && ch <= '9') { x = (x << 1) + (x << 3) + (ch ^ 48); ch = getchar(); } return x * f;}//==============================================================================ll nxt[1000010];char a[1000010], b[1000010];void get_nxt(){ ll lenb = strlen(b); int j = 0, k = -1; nxt[0] = -1; while (j < lenb) { if (k == -1 || b[j] == b[k]) nxt[++j] = ++k; else k = nxt[k]; }}int KMP(){ ll lenb = strlen(b), lena = strlen(a), res = 0; get_nxt(); ll i = 0, j = 0; while (i < lena) { if (j == -1 || a[i] == b[j]) i++, j++; else j = nxt[j]; if (j == lenb) { res++; // 能不能重复 j = nxt[j]; // j = 0; } } return res;}int main(){ IOS; ll n; cin >> n; while (n--) { if (a[0] == '#') break; cin >> b >> a; cout << KMP() << endl; } return 0;}/*ababaaba*/

转载地址:http://igod.baihongyu.com/

你可能感兴趣的文章
Nacos服务部署安装
查看>>
nacos本地可以,上服务器报错
查看>>
Nacos注册Dubbo(2.7.x)以及namespace配置
查看>>
Nacos注册中心有几种调用方式?
查看>>
nacos注册失败,Feign调用失败,feign无法注入成我们的bean对象
查看>>
nacos源码 nacos注册中心1.4.x 源码 nacos源码如何下载 nacos 客户端源码下载地址 nacos discovery下载地址(一)
查看>>
nacos源码 nacos注册中心1.4.x 源码 spring cloud alibaba 的discovery做了什么 nacos客户端是如何启动的(二)
查看>>
nacos源码 nacos注册中心1.4.x 源码 如何注册服务 发送请求,nacos clinet客户端心跳 nacos 注册中心客户端如何发送的心跳 (三)
查看>>
Nacos源码分析:心跳机制、健康检查、服务发现、AP集群
查看>>
nacos看这一篇文章就够了
查看>>
Nacos简介、下载与配置持久化到Mysql
查看>>
Nacos简介和控制台服务安装
查看>>
Nacos管理界面详细介绍
查看>>
Nacos编译报错NacosException: endpoint is blank
查看>>
nacos自动刷新配置
查看>>
nacos运行报错问题之一
查看>>
Nacos部署中的一些常见问题汇总
查看>>
NACOS部署,微服务框架之NACOS-单机、集群方式部署
查看>>
Nacos配置Mysql数据库
查看>>
Nacos配置中心中配置文件的创建、微服务读取nacos配置中心
查看>>