
字符串
迷亭1213
帅帅帅
展开
-
后缀数组常见应用
后缀数组的应用摘要后缀数组是处理字符串相关问题的有力工具,后缀数组的题型与解法相对固定,因此对于本文中的几种题型要掌握解法与原理。本文假设读者已经掌握求后缀数组(sa)以及高度数组(lcp)的算法。本文将介绍4类后缀数组的应用,分别是:最长公共前缀单个字符串相关问题两个字符串相关问题多个字符串相关问题相关符号说明S 是原字符串。suffix( i )表示字符串 S 从位置 ...原创 2019-10-17 13:21:08 · 2582 阅读 · 0 评论 -
后缀数组题集
sa[i]:排名为i的后缀起始位置是多少。rank[i]:从 i 位置起始的后缀在所有后缀中字典序排序后序号,与sa互逆。lcp[i]:S[sa[i] ,…] 与 S[sa[i+1] , …]的最长公共前缀。Musical Theme测试地址题意简述给n个数组成的串,求是否有多个“相似”且不重叠的子串的长度大于等于5,两个子串相似当且仅当长度相等且每一位的数字差都相等。解题思路本题...原创 2019-10-17 13:20:36 · 599 阅读 · 0 评论 -
AC自动机模板
AC自动机Aho-Corasick automaton,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法,又称AC自动机算法。AC自动机是用来处理字符串匹配问题。KMP是处理单模式串匹配问题,而AC自动机是用于处理多模式串匹配问题,例如:给出 n 个单词,再给出一段包含 m 个字符的文章,问有多少个单词在文章中出现过?以下模板就是根据该问题整理。使用说明其中的trie树编号是从 1...原创 2019-10-06 11:26:39 · 1234 阅读 · 0 评论 -
AC自动机题集
Keywords Search题意描述原题来自:HDU 2222给定 n 个长度不超过 50 的由小写英文字母组成的单词准备查询,以及一篇长为 m 的文章,问:文中出现了多少个待查询的单词。多组数据。解题思路模板题代码示例#include<bits/stdc++.h>using namespace std;const int N = 1e4+10; //模式串个数 ...原创 2019-10-06 11:25:58 · 997 阅读 · 0 评论 -
KMP算法
摘要KMP算法,又称模式匹配算法,能够在线性时间内判定字符串 T 是否为 S 的子串,并求出字符串 T 在 S 中各次出现的位置。KMP算法比较晦涩难懂。本文对于思想介绍略简,侧重于实现。问题模型与算法思路问题模型: 给定两个字符串 S 和 T ,试求出 T 在 S 中第一次出现的位置。上述问题模型是模式串匹配最基础的模型,即单模式串匹配问题,这类问题是KMP算法以及字符串Hash大展身...原创 2019-09-30 23:38:34 · 9035 阅读 · 2 评论 -
Trie字典树题集
测试地址Phone List原题来自:POJ 3630给定 n 个长度不超过 10 的数字串,问其中是否存在两个数字串 S,T,使得 S 是 T 的前缀,多组数据。解题思路Trie的经典应用,可以作为模板题练手。代码示例#include<bits/stdc++.h>using namespace std;const int SZ = 1e5+10;int trie...原创 2019-09-30 23:37:36 · 1462 阅读 · 0 评论 -
KMP练习题集
测试地址剪花布条题意简述原题来自:HDU 2087一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?解题思路就是普通的kmp算法,只不过这里的两个模式串不能重叠,我们基于贪心策略遇到一个选一个即可。代码示例#include<bits/stdc++.h>using namespa...原创 2019-09-30 23:36:56 · 1083 阅读 · 0 评论 -
MUV LUV EXTRA(循环节)
测试地址Problem Description鉴纯夏是一名成绩不太好的高中生。一天她在数学考试中碰到了一道求某条线段长度的问题。因为她并不会做这道题,所以她准确地作图后用尺子量出了这条线段的长度。不幸的是,答案在10进制下为一个无限小数,纯夏只量出了这个无限小数在10进制表示下的前若干位。纯夏猜测问题的答案为一个有理数,所以答案为一个无限循环小数,如13=0.333⋯,3635=1.0285...原创 2019-09-30 23:36:22 · 771 阅读 · 0 评论 -
哈希与哈希表
摘要哈希算法是通过一个哈希函数 H,将一种数据(字符串、大数等)转化为能够用变量表示或者能直接作为数组下标的数,通过哈希函数转化得到的数值我们成为哈希值。通过哈希值可以实现快速查找和匹配。本文主要介绍两种哈希算法的应用:字符串 Hash 和哈希表。字符串Hash字符串Hash有几种不同的用途,但是基于同一个原理,就是通过hash值匹配。首先就是模式串匹配问题,n = |S| , m = |...原创 2019-09-28 18:47:25 · 717 阅读 · 0 评论 -
字符串最短循环节
循环节与最短循环节:若某个字符串是由某个子串循环构成的,那么就称该子串为原串的循环节,长度最短的循环节就是最短循环节。如abababab,abab和ab都是原串的循环节,而最短循环节是ab。结论:如果字符串 s 有个循环节 son,n = |s| , x = |son|,字符数组下标从1开始,那么:x 一定是 n 的约数。那么s[1,n-x] = s[x, n] = son。证明...原创 2019-09-28 10:55:31 · 9858 阅读 · 0 评论 -
字符串与哈希题集
我校OJ:测试地址图书配套OJ:测试地址A. OulipoDescription给出两个字符串s1,s2(只有大写字母),求s1在s2中出现多少次。例如:s1=“ABA”,s2=“ABAABA”,答案为2。解题思路:KMP算法的模板,也可以用拓展KMP解决。代码示例:#include<cstring>#include<cstdio> const int ...原创 2019-09-27 12:25:43 · 991 阅读 · 0 评论 -
子字符串查找之Rabin-Karp算法
1.背景1.1 算法简介:M.O.Rabin和R.A.Karp发明了一种基于散列的字符串查找算法。我们只需要计算模式串的散列函数,然后利用相同的散列函数计算文本中所有可能的M个字符的子字符串散列值并寻找匹配。如果找到了一个散列值和模式字符串相同的子字符串,再继续验证是否相同。这是一个有趣的算法,重点不在于其只用线性时间解决问题,而在于其对散列技术的使用,这是一个具有启发性的算法!1.2 结...原创 2019-01-01 19:13:22 · 1052 阅读 · 0 评论