
字符串
JavonLu
想得很多,所以需要求做更多
展开
-
trie树(字典树)
定义:trie树(字典树),是一种哈希树的变种。是一种用于快速检索的多叉树结构。原理:利用所有串构建了一个 字典树,在查找过程中利用字符串的公共前缀降低查询时间的开销,最大限度地减少无谓的字符串比较,以达到提高效率的目。 例 将字符串”abc”,”ab”,”bd”,”dda”,根据该字符串序列构建一棵Trie树。则构建的树如下: 如图,每一个节点即为一个单词的字母,沿着root查找子节点,即原创 2016-03-15 20:45:32 · 423 阅读 · 0 评论 -
SPOJ220---Relevant Phrases of Annihilation(后缀数组+二分,对后缀分组)
题目 题意:给定N个串,求每个串至少出现两次的最长子串 思路:二分枚举长度,根据长度len分组,若某组里的个数>=k,则说明存在长度为len的至少重复k次子串。#include <cstdio>#include <algorithm>#include <iostream>#include <cstring>using namespace std;const int MAXN = 1100原创 2016-09-05 19:18:14 · 350 阅读 · 0 评论 -
AIM Tech Round 3 (Div. 2) -- D. Recover the String (构造字符串)
题目 题意: 给你一个只包含01的字符串,告诉你00,01,10,11子字符串的个数,还原这个字符串。不能存在则输出Impossible.Examples input 1 2 3 4 output Impossible input 1 2 2 1 output 0110从00和11的个数,可以算出字符串中0和1的个数,然后即可构造。但当a00,a11中有为0的情况下,需要特殊考虑原创 2016-08-25 20:21:28 · 535 阅读 · 0 评论 -
HDU1251 统计难题
字典树 复习一下#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define MAX 26typedef struct Trie_node{ int count; struct Trie_node* next[26]; bool exist;}TrieNode;TrieNod原创 2016-09-03 20:51:26 · 265 阅读 · 0 评论 -
HDU5532 Almost Sorted Array(最长不上升子序列)
题目题意: 给出n个数,问如果去掉其中一个数,能否构成不上升或者不下降的序列。思路: 求串的最长不上升或者不下降序列的长度,如果长度len>= n-1;就满足情况。#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>using namespace std; int T,n,i,j,k,a[1000原创 2016-09-11 20:30:55 · 554 阅读 · 0 评论 -
POJ2774 Long Long Message (后缀数组—最长公共子串)
题目题意:给定两个字符串 A 和 B ,求最长公共子串。A 的后缀和 B 的后缀的最长公共前缀的最大值。如果枚举A和 B 的所有的后缀,那么这样做显然效率低下。由于要计算 A 的后缀和 B 的后缀的最长公共前缀,所以先将第二个字符串写在第一个字符串后面,中间用一个没有出现过的字符隔开,再求这个新的字符串的后缀数组。观察一下,看看能不能从这个新的字符串的后缀数组中找到一些规律。以 A=“ aaaba原创 2016-07-31 22:53:53 · 379 阅读 · 0 评论 -
POJ3261 Milk Patterns
题目题目大意: 求可覆盖的出现k次的子串的最大长度。思路分析: 二分答案的长度,然后扫描height判断是否成立。 排名第i的字符串和排名第j的字符串的最长公共前缀等于height[i],height[i+1],…,height[j]中的最小值,所以把所有不小于k的height[]看成一组就保证了组内任意两个字符串的最长公共前缀都至少为k,且长度为k的前缀是每个字符串共有的,因此这组内有多少个原创 2016-07-31 17:22:32 · 246 阅读 · 0 评论 -
URAL1297(Manacher算法)
题目:给定一个串,对于它的某个子串,正过来写和反过来写一样,称为回文子串。 思路:Manacher算法,时间复杂度O(n);后缀数组,举每一位,计算以这个位为中心的的最长回文子串(注意串长要分奇数和偶数考虑)。将整个字符串反转写在原字符串后面,中间用$分隔。这样把问题转化为求某两个后缀的最长公共前缀。#include<iostream>#include<cstring>#include<c原创 2016-04-08 19:21:18 · 985 阅读 · 0 评论 -
POJ1743(后缀数组)
题目题意:有N(1 <= N <=20000)个音符的序列来表示一首乐曲,每个音符都是1..88范围内的整数,现在要找一个重复的主题。“主题”是整个音符序列的一个子串,它需要满足如下条件: 1.长度至少为5个音符。 2.在乐曲中重复出现。(可能经过转调,“转调”的意思是主题序列中每个音符都被加上或减去了同一个整数值) 3.重复出现的同一主题不能有公共部分。即给出一串字符原创 2016-04-07 20:19:48 · 712 阅读 · 0 评论 -
字符串:KMP Eentend-Kmp 自动机 trie图 trie树 后缀树 后缀数组
准备啃字符串类的题目…. 转自:http://duanple.blog.163.com/blog/static/709717672009825004092/涉及到字符串的问题,无外乎这样一些算法和数据结构:自动机 KMP算法 Extend-KMP 后缀树 后缀数组 trie树 trie图及其应用。当然这些都是比较高级的数据结构和算法,而这里面最常用和最熟悉的大概是kmp,即使如此还是有相当一部分人转载 2016-03-13 20:02:44 · 608 阅读 · 0 评论 -
hdu3613 extend-kmp(Trie入门)
原题链接Sample Input banana band bee absolute acmba b band abc Sample Output2 3 1 0题意: 输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串。思路:原创 2016-03-15 21:56:03 · 227 阅读 · 0 评论 -
hdu3613 extend-kmp
原题链接Sample Input 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 aba 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 acacac Sample Output 1 6对于我们只需要枚举扫描一遍extend数组,扫描到的当前位置之前为前半部分T1, 然原创 2016-03-14 20:20:07 · 223 阅读 · 0 评论 -
后缀数组
后缀数组——处理字符串的有力工具 后缀数组,很精妙的数据结构。 后缀:从母串的某一位置开始到结尾,suffix(i) = Ai,Ai+1…An。 后缀数组:后缀数组SA是个一维数组,它保存1…n的某个排列SA[1],SA[2]…SA[n],并且保证suffix(SA[i]) < suffix(SA[i+1]),也就是将S的n个后缀从小到大排好序后的开头位置保存到SA中。转载 2016-03-18 19:42:44 · 651 阅读 · 0 评论