1953 Problem B #103. 子串查找】的更多相关文章

#include<stdio.h> #include<string.h> main() { char a[100],b[100]; int n,k,i; gets(a); gets(b); n=0; for(k=0;k<=strlen(a)-strlen(b);k++) { for(i=0;b[i]!=0;i++) if(b[i]!=a[k+i]) break; if(b[i]==0) n=n+1; } printf("%d\n",n); }/*A Not…
题意 给定两个字符串 \(A\) 和 \(B\),求 \(B\) 在 \(A\) 中的出现次数. 思路 这是一道 \(KMP\) 的模板题. 不过 \(Hash\) 是个好东西,可以用 \(Hash\) 代替 \(KMP\) 算法. 预处理两个字符串的哈希值,然后将 \(A\) 中所有长度为 \(len(B)\) 的子串的哈希值与 \(B\) 的哈希值比较即可. 时间复杂度 \(O(n + m)\),与 \(KMP\) 算法一样! 缺点就是常数略大,而且不能用 \(KMP\) 的 \(next\…
题目描述 这是一道模板题. 给定一个字符串 A AA 和一个字符串 B BB,求 B BB 在 A AA 中的出现次数. A AA 中不同位置出现的 B BB 可重叠. 输入格式 输入共两行,分别是字符串 A AA 和字符串 B BB. 输出格式 输出一个整数,表示 B BB 在 A AA 中的出现次数. 样例 样例输入 zyzyzyz zyz 样例输出 3 数据范围与提示 1≤A,B 1 \leq A, B1≤A,B 的长度 ≤106 \leq 10 ^ 6≤10​6​​,A AA.B BB …
题意 给出两个字符串 $s_1,s_2$,求 $s_2$ 在 $s_1$ 中出现的次数. 分析 预处理出两个字符串的哈希值,再逐位比较. 时间复杂度为 $O(n+m)$,和 $kmp$ 算法一样. 可能常数大一点点,还有就是没法用 $kmp$ 的 $next$ 数组. #include <bits/stdc++.h> using namespace std; typedef unsigned long long ull; ; ; ull h[maxn], p[maxn], ha; char s…
题目描述 这是一道模板题. 给定一个字符串 A A A 和一个字符串 B B B,求 B B B 在 A A A 中的出现次数.AAA 和 BBB 中的字符均为英语大写字母或小写字母. A A A 中不同位置出现的 B B B 可重叠. 输入格式 输入共两行,分别是字符串 A A A 和字符串 B B B. 输出格式 输出一个整数,表示 B B B 在 A A A 中的出现次数. 样例 样例输入 zyzyzyz zyz 样例输出 3 数据范围与提示 1≤A,B 1 \leq A, B1≤A,B…
问题: 右移的位数和目标串没有多大的关系,和子串有关系. 已匹配的字符数现在已经有了,部分匹配值还没有. 前六位匹配成功就去查找PMT中的第六位. 现在的任务就是求得部分匹配表. 问题:怎么得到部分匹配表呢? 前缀集合和后缀集合取最长的交集就是部分匹配值. 例如,上图中前缀和后缀没有交集,部分匹配值就是0. 问题: 怎么编程产生部分匹配表呢? 从第2个字符开始递推,做一个贪心的假设,我们现在要求的匹配值是由上一次得到的匹配值加1得到. 假设有5个字符,当前的匹配值是3,当有6个字符时,我们就假设…
串的定长顺序存储#define MAXSTRLEN 255,//超出这个长度则超出部分被舍去,称为截断 串的模式匹配: 串的定义:0个或多个字符组成的有限序列S = 'a1a2a3…….an ' n = 0时为空串串的顺序存储结构:字符数组,串的长度就是数组末尾‘\0'前面的字符个数数组需在定义时确定长度,有局限性数组的最大长度二:串的堆分配存储表示typedef struct { char *ch; //若是非空串,则按串长分配存储区 //否则ch为空 int length; //串长度}HS…
1. 朴素算法的改进 (1)朴素算法的优化线索 ①因为 Pa != Pb 且Pb==Sb:所以Pa != Sb:因此在Sd处失配时,子串P右移1位比较没有意义,因为前面的比较己经知道了Pa != Sb,可以利用己经比较过的事实,而不必进行第2轮的比较,从而提高效率. ②KMP算法就是为解决这一问题而提出的! (2)部分匹配与前后缀(以S字符串“ABCDAB”为例) ①前缀:除了最后一个字符以外,一个字符的全部头部组合的集合.如,字符串S的前缀有{A,AB,ABC,ABCD,ABCDA},其中AB…
0.目录 1.KMP 子串查找算法 2.KMP 算法的应用 3.小结 1.KMP 子串查找算法 问题: 如何在目标字符串S中,查找是否存在子串P? 朴素解法: 朴素解法的一个优化线索: 示例: 伟大的发现: 匹配失败时的右移位数与子串本身相关,与目标串无关 移动位数 = 已匹配的字符数 - 对应的部分匹配值 任意子串都存在一个唯一的部分匹配表 部分匹配表示例: 问题: 部分匹配表是怎么得到的? 前缀 除了最后一个字符以外,一个字符串的全部头部组合 后缀 除了第一个字符以外,一个字符串的全部尾部组…
1, 如何在目标字符串 s 中,查找是否存在子串 p(本文代码已集成到字符串类——字符串类的创建(上)中,这里讲述KMP实现原理) ? 1,朴素算法: 2,朴素解法的问题: 1,问题:有时候右移一位是没有意义的: 2,KMP 算法可以右移一定的位数,提高效率: 3,朴素算法和 KMP 算法对比示例图: 2,伟大的发现(KMP): 1,匹配失败时的右移位数与子串本身相关,与目标无关: 2,移动位数 = 已匹配的字符数 - 对应的部分匹配值: 1,“已匹配的字符数”已知,“对应的部分匹配值”未知:…
问题: 函数名: strstr 函数原型:char *strstr(const char *str1, const char *str2); 语法:* strstr(str1,str2) str1: 被查找目标 string expression to search. str2: 要查找对象 The string expression to find. 返回值:该函数返回str2第一次在str1中的地址,如果没有找到,返回NULL 例子: charstr[]="1234xyz"; ch…
题意 这是一道模板题. 给定一个字符串 A 和一个字符串 B ,求 B 在 A 中的出现次数.A 和 B 中的字符均为英语大写字母或小写字母. A 中不同位置出现的 B 可重叠. 分析 参照jklover的题解. 此题用hash做的话,只需求出字符串b的hash值,在字符串a中O(n)枚举每个长度等于|b|的子串,判断hash值是否相等即可. 时间复杂度:线性. 代码 #include<bits/stdc++.h> #define rg register #define il inline #…
描述:Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times. You may assume that the array is non-empty and the majority element always exist in the array. 思路1:Moore voting algorith…
题目描述 思路 使用哈希值表示较长串的子串的值,直接比较哈希值是否相等 代码 #include <cstdio> #include <cstring> using namespace std; char a[1000005], b[1000005]; unsigned int sum[1000005], sumb, bt[1000005]; int bs = 37, ans; int lena, lenb; unsigned int get(int st) { return sum…
/* 一个性质? right集合中只有相邻的位置才会有用 那么考虑set启发式合并, 能够求出大概nlogn个有用的对 那么将这些对按照右端点排序, 查询也按照右端点排序就可以离线维护信息 然后需要维护答案的话?? 区间和一次函数取max??? 应该有别的办法吧 普通线段树就好了 */ #include<cstdio> #include<algorithm> #include<cstring> #include<set> #include<queue&…
目录 #1. A + B Problem #2. Hello, World! #3. Copycat #4. Quine #7. Input Test #100. 矩阵乘法 #101. 最大流 #102. 最小费用流 #103. 子串查找 #104. 普通平衡树 #108. 多项式乘法 #119. 非负权单源最短路 #130. 树状数组 1 :单点修改,区间查询 #139. 树链剖分 #161. 乘法逆元 2 #556. 「Antileaf's Round」咱们去烧菜吧 #2030. 「SDOI…
目录 笔记整理 计划 要学的东西 缺省源 要做的题 搜索 高斯消元 矩阵 排列组合 2019.7.9 2019.7.10 kmp ac自动机 2019.7.11 2019.7.15 笔记整理 1.同余and乘法逆元学习笔记 2.排列组合学习笔记 3.字符串Hash学习笔记 4.树状数组学习笔记 5.线段树学习笔记 6.ST表学习笔记 7.树形DP学习笔记 8.位运算学习笔记 9.二分答案学习笔记 还没写 ,咕咕咕 10.区间dp学习笔记 待更新例题 11.背包问题 12.STL学习笔记 13.字…
前言 此文主要介绍hash的各种乱搞方法,hash入门请参照我之前这篇文章 不好意思hash真的可以为所欲为 在开头先放一下题表(其实就是我题解中的hash题目qwq) 查询子串hash值 必备的入门操作,因为OI中用到的hash一般都是进制哈希,因为它有一些极其方便的性质,比如说,是具有和前缀和差不多的性质的. 假设一个字符串的前缀hash值记为\(h[i]\),我们hash时使用的进制数为\(base\),那么显然\(h[i]=h[i-1]*base+s[i]\) 记\(p[i]\)表示\(…
//  我觉得记日记是个好习惯吧 毕竟指不定哪天就学不下去了 就AFO了 就没有梦了   // [置顶]活跃于你谷普及训练场.ybt(没底气说全部).loj(提高基础部分)  //优先级从前往后 因为我还是太菜了 2019.1.26 : 寒假开始了 带着并不可观的期末成绩也无力去冲刺了 不可以颓废. 听了老叶的动员大会 感觉自己迟早AFO 于是可以努力学些东西了 至少要不留遗憾.      幸好有我女人陪我(逃 [欧拉图规律]  //超级重要的样子⒈凡是由偶点组成的连通图,一定可以一笔画成.画时…
描述 http://codevs.cn/problem/1230/ ... 1230 元素查找 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond       题目描述 Description 给出n个正整数,然后有m个询问,每个询问一个整数,询问该整数是否在n个正整数中出现过. 输入描述 Input Description 第一行两个整数 n 和m. 第二行n个正整数(1<=n<= 100000) 第三行m个整数(1<=m<=100000) 输…
Problem 1692 Key problem Accept: 103    Submit: 553 Time Limit: 1000 mSec    Memory Limit : 32768 KB Problem Description Whenever rxw meets Coral, he requires her to give him the laboratory key. Coral does not want to give him the key, so Coral ask h…
头文件:#include <string.h> 定义函数:int strcasecmp (const char *s1, const char *s2); 函数说明:strcasecmp()用来比较参数s1 和s2 字符串,比较时会自动忽略大小写的差异. 返回值:若参数s1 和s2 字符串相同则返回0.s1 长度大于s2 长度则返回大于0 的值,s1 长度若小于s2 长度则返回小于0 的值. 头文件:#include <string.h> strncmp() 用来比较两个字符串的前…
leetcode代码 利用堆栈:http://oj.leetcode.com/problems/evaluate-reverse-polish-notation/http://oj.leetcode.com/problems/longest-valid-parentheses/ (也可以用一维数组,贪心)http://oj.leetcode.com/problems/valid-parentheses/http://oj.leetcode.com/problems/largest-rectang…
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=30746#problem/D D - 平方根大搜索 UVA12505 - Searching in sqrt(n) 解题思路:求出n的平方根,去整数,化二进制,字符串子串查找. 基本思路简单,但是求平方根那里,不能直接用库函数方法,因为Math.sqrt()返回值的精度比较小.我们这里要用到的精度最高是140位.所以,求平方根的函数(中心代码转自http://blog.csdn.net/…
A 计划日 题意:已知李明在YYYY年MM月DD日星期W订了学习计划,现在想看看李明N天后的完成情况和个人总结,你能告诉我那天的日期和星期几吗? 模拟日期计算: 计算星期可以用基姆拉尔森公式 //中国的星期 结果要+1 int Day(int y,int m,int d) { if(m==1 || m==2) m+=12,y-=1; return (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7; } AC代码 #include<bits/stdc++.h> us…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1247 Problem DescriptionA hat’s word is a word in the dictionary that is the concatenation of exactly two other words in the dictionary.You are to find all the hat’s words in a dictionary. InputStandard…
学习内容 一共五百多行代码,其中包含了linux编程常用的API.可以通过学习源码,把不熟悉的API练习练习. 1 如何使用webbench (1)查看参数帮助 (2)运行方法 即以上模拟30个客户端在30秒期间并发请求百度,结果如下: 每分钟平均有1532次请求连接,服务器每秒传输字节为4039230,在30秒期间请求连接成功为766次,失败0次. 2 源码常用函数练习 (1) 选项参数 int getopt_long(int argc, char * const argv[],const c…
172.木棒切割问题 https://sunnywhy.com/problem/172 题目描述 给出n根木棒的长度,现在希望通过切割它们来得到至少k段长度相等的木棒(长度必须是整数),问这些长度相等的木棒的最大长度. 输入描述 第一行为两个正整数n.k(1≤n≤103.1≤k≤108),分别表示木棒的根数.需要得到的长度相等的木棒根数: 第二行为n个整数(1≤每个整数≤105),表示木棒的长度. 输出描述 一个整数,表示木棒的最大长度.如果无法达成,此时最大长度为0. 思考 如果通过暴力解法,…
利用堆栈:http://oj.leetcode.com/problems/evaluate-reverse-polish-notation/http://oj.leetcode.com/problems/longest-valid-parentheses/ (也可以用一维数组,贪心)http://oj.leetcode.com/problems/valid-parentheses/http://oj.leetcode.com/problems/largest-rectangle-in-histo…
核心Core: Version.h:版本控制信息,宏POCO_VERSION,值格式采用0xAABBCCDD,分别代表主版本.次版本.补丁版本.预发布版本: Poco.h:简单地包含了头文件Foundation.h: Foundation.h:使用其他任何Foundation模块前需要包含的头文件,主要定义库导出宏POCO_DLL.Foundation_API以及自动连接相应配置正确的库引用文件lib:包含库配置文件Config.h: 平台相关的Platform.h以及各个平台相应的文件Plat…