hdu1686 最大匹配次数 KMP
题意:
给你两个串,问你串a在串b中出现了多少次。
思路:
直接匹配,KMP时匹配到匹配串的最后一个的时候不用跳出,直接匹配就行了,最后一个'/0'不会和目标串匹配,所以经过next[l2]就直接自动找到该去的位置了,怎么说呢,今天刚学的KMP,给我的感觉就是"记忆化搜索"。
#include<stdio.h>
#include<string.h>
char a[1100000] ,b[11000];
int next[11000]; void get_next(int m)
{
int j ,k;
j = 0 ,k = -1;
next[0] = -1;
while(j < m)
{
if(k == -1 || b[j] == b[k])
next[++j] = ++ k;
else
k = next[k];
}
return ;
} int KMP(int n ,int m)
{
int sum = 0;
int i ,j;
for(j = i = 0 ;i < n ;)
{
if(a[i] == b[j])
{
if(j == m - 1)
sum ++;
i ++ ,j ++;
}
else
{
j = next[j];
if(j == -1)
{
j = 0;
i ++;
}
}
}
return sum;
} int main ()
{
int t ,n ,m;
scanf("%d" ,&t);
while(t--)
{
scanf("%s %s" ,b ,a);
n = strlen(a);
m = strlen(b);
if(m > n) puts("0");
else
{
get_next(m);
printf("%d\n" ,KMP(n ,m));
}
}
return 0;
}
hdu1686 最大匹配次数 KMP的更多相关文章
- [hdu1686] Oulipo【KMP】
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1686 保存KMP模版,代码里P是模版串,next[]就是为它建立的.T是文本串,就是一般比较长的.nex ...
- HDU1686 Oulipo 题解 KMP算法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1686 题目大意:给你一个子串t和一个母串s,求s中有多少个子串t. 题目分析:KMP模板题. cal_ ...
- kmp练习
kmp板子如下, 失配数组不优化的话, $f_i$就表示子串[0...i]前后缀最大匹配长度 int main() { scanf("%s%s", t, p); int n = s ...
- KMP算法-Java实现
目的: 为了解决字符串模式匹配 历程: 朴素模式匹配:逐次进行比较 KMP算法:利用匹配失败得到的信息,来最大限度的移动模式串,以此来减少比较次数提高性能 概念: m:是目标串长度 n:是模式串长度 ...
- codeforces432D Prefixes and Suffixes(kmp+dp)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud D. Prefixes and Suffixes You have a strin ...
- POJ 3461 Oulipo(KMP裸题)
Description The French author Georges Perec (1936–1982) once wrote a book, La disparition, without t ...
- Power Strings(poj 2406)
题意:求字符串中循环节出现的次数 KMP!!! #include<cstdio> #include<iostream> #include<cstring> #def ...
- HDU--1358--KMP算法失配函数getfail()的理解--Period
/* Name: hdu--1358--Period Author: 日天大帝 Date: 20/04/17 10:24 Description: 长度/向后移动的位数 = 出现的次数 kmp其实匹配 ...
- re模块(正则表达式)
re,findall("匹配正则","内容") #所有满足条件的结果都返回到一个列表里 ret = re.search(“匹配规则”,“内容”) #返回 匹配到 ...
随机推荐
- 剑指 Offer 14- II. 剪绳子 II + 贪心 + 数论 + 快速幂
剑指 Offer 14- II. 剪绳子 II 题目链接 因为有取模的操作,动态规划中max不能用了,我们观察:正整数从1开始,但是1不能拆分成两个正整数之和,所以不能当输入. 2只能拆成 1+1,所 ...
- 零投资!零风险!手把手教你挖pi币
为什么说PI币属于区块链4.0代币呢?我们先从人类社会的生产力生产关系的递进来做一波有利的证明! 原始社会--封建王朝--君主立宪--资本主义--社会主义 原始社会:社会物质财富分配既有弱肉强食也有按 ...
- 你想知道的 std::vector::push_back 和 std::vector::emplace_back
引言 C++ 11 后,标准库容器 std::vector 包含了成员函数 emplace 和 emplace_back.emplace 在容器指定位置插入元素,emplace_back 在容器末尾添 ...
- python基础学习之类的属性 增删改查
类中的属性如何在类外部使用代码进行增删改查呢 增加.改变: setattr内置函数以及 __setattr__魔法方法 class A: aaa = '疏楼龙宿' a = A() setattr(a, ...
- malloc和free解析
malloc和free都是库函数,调用系统函数sbrk()来分配内存.除了分配可使用的内存以外,还分配了"控制"信息,这有点像内存池常用的手段.并且,分配的内存是连续的. 1. m ...
- java IO流文件拷贝文件(字符流标准写法)
public static void copyFile2(String path1, String path2) { Reader reader = null; Writer writer = nul ...
- 你真的懂 i++ 和 ++i 吗?
对于 ++i 和 i++,许多人可能都知道,不就是先加1再取值,和先取值再加1嘛.然而,真的是这样吗?请先看以下4道题,能全部答对可以忽略这篇文章. 题目 // 示例1 int i = 1; i = ...
- python的类的实际联系--烤地瓜和搬家具
#coding:utf-8 2 class SweetPotato(): 3 def __init__(self): 4 #先初始化对象 5 self.cook_time = 0 6 self.coo ...
- java例题_44 一个偶数总能表示为两个素数之和
1 /*44 [程序 44 偶数的素数和] 2 题目:一个偶数总能表示为两个素数之和. 3 */ 4 5 /*分析 6 * 1.从键盘得到一个偶数(大于2的偶数,因为1不是素数) 7 * 2.用for ...
- 【Java】 5.0 判断与转换
[概述] 在if/条件语句中,我们已经谈及判断了,这次将详细讲讲一些逻辑判断 基本逻辑 &:且,And,需要二者均为True |:或,Or ,需要二者其一为False即可 ^:异或,XOE,两 ...