
算法题解-字符串
Jarily
这个作者很懒,什么都没留下…
展开
-
关于字符串匹配(单模式匹配)的各种算法
#include#include#include#includeusing namespace std;const int N=100000;//文本串的最大长度const int M=100;//模式串的最大长度int n;//文本串的实际长度int m;//模式串的实际长度char T[N];//文本串char P[M];//模式串int pre[N];//kmp里面的前原创 2012-11-27 13:18:02 · 2284 阅读 · 0 评论 -
HDU3374(String Problem)字符串-最小表示法+KMP
/*************************************************题目大意:求字典序最小的和字典序最大的位置,若有多个则取最左边的;并给出该串在这n个串中出现的次数,即同构串的个数;算法分析:求字典序最小(大)的位置主要用到字符串的最小(大)表示法;求同构串个数可以转换为求该串最小循环节的总个数;涉及到KMP算法中的next函数;********原创 2013-03-31 14:27:01 · 1962 阅读 · 0 评论 -
HDU3065(病毒侵袭持续中)字符串匹配-简单的AC自动机
/*******************************************************题目大意:给多串病毒和一个源码;求每串病毒在源码中出现的次数;算法思想:AC自动机;给每串病毒一个编号;当匹配成功后用visit数组记录该病毒出现的次数;********************************************************/原创 2013-04-05 15:23:41 · 1621 阅读 · 0 评论 -
字符串-最小(大)表示法
/**************************************************最小(大)表示法:最小(大)表示法主要用于解决判断"同构"一类问题;循环同构问题:给出两个串:s1="babba"和s2="bbaba",其中两者均看成环状即首尾相接的;问:从s1的哪里断开可以得到和s2一样的串或者两者不会相同?本题就是从s1的第2个字符’a’后面断开,可以得到与s原创 2013-03-30 21:08:00 · 1096 阅读 · 0 评论 -
HDU2476(String painter)DP
/******************************************************题意:给出两个字符串a,b,将a串变为b串;每次可以将某一个连续区间变成同一个字符,问最少需要操作多少次;算法:动态规划(DP)分析:第一步:设dp[i][j]表示从i到j至少要改变多少次;则状态转移方程为:dp[i][j]=min(dp[i+1][j]+(b[i]==原创 2012-12-20 20:27:01 · 787 阅读 · 0 评论 -
字符串匹配-AC自动机
/*******************************************************算法介绍:AC自动机(Aho_Corasick automation),为多模字符串匹配算法;常见的例子为给出n个单词,再给出一段包含m个字符的文章,找出有多少个单词在文章里出现过;算法步骤:(1)构造一棵Trie树;根节点不包含字符,除根节点外每一个节点都只包含一个字符;原创 2013-03-25 21:10:23 · 1628 阅读 · 0 评论 -
HDU1251(统计难题)统计以某个字符串为前缀的单词数量(Trie树)
/********************************************题目大意:给出很多单词,统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀);算法分析:字典树模版题;*********************************************/#include#include#include#include#include#i原创 2013-03-25 18:42:08 · 2411 阅读 · 0 评论 -
数据结构-Trie树
/**********************************************************数据结构:Trie树,又称单词查找树或字典树,是一种树形结构,是一种哈希树的变种;基本原理:Trie树的核心思想是空间换时间,利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的;应用:用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用原创 2013-03-25 13:06:39 · 1839 阅读 · 0 评论 -
实现后缀数组的倍增算法和DC3算法
/************************************************数据结构:后缀数组(Suffix_Array);子串:字符串S的子串r[i..j],i≤j,表示r串中从i到j这一段,也就是顺次排列r[i],r[i+1],...,r[j]形成的字符串;后缀:后缀是指从某个位置i开始到整个串末尾结束的一个特殊子串;字符串r的从第i个字符开始的后缀表示为原创 2013-03-22 14:31:52 · 4203 阅读 · 1 评论 -
PKU2774(Long Long Message)求最长公共子串(后缀数组)
/*******************************************************题目大意:给定两个字符串A和B,求最长公共子串;算法思想:字符串的任何一个子串都是这个字符串的某个后缀的前缀;求A和B的最长公共子串等价于求A的后缀和B的后缀的最长公共前缀的最大值;如果枚举A和B的所有的后缀,很明显效率低下;由于要计算A的后缀和B的后缀的最长公共前缀,所原创 2013-03-23 15:13:13 · 1883 阅读 · 0 评论 -
Ural1297(Palindrome)求最长回文子串(后缀数组)
/*********************************************题目地址:http://acm.timus.ru/problem.aspx?space=1&num=1297题目大意:给定一个字符串,求最长回文子串;算法分析:穷举每一位,然后计算以这个字符为中心的最长回文子串;注意这里要分两种情况,一是回文子串的长度为奇数,二是长度为偶数;两种情况都可原创 2013-03-23 21:04:24 · 2051 阅读 · 0 评论 -
PKU1743(Musical Theme)求不可重叠最长重复子串(后缀数组+二分)
/**********************************************题目大意:给出一个旋律,用n个数字[1,88]表示其音符,求它的最长的主题长度;一个旋律的主题是一段至少出现过两次的不重叠音乐片段;重复出现也包括一段音乐全体加上某个数后再次出现(如1 2 3 4 5和5 6 7 8 9为同一个音乐片段,全部+4);主题长度至少为5,无解输出0;算法分析:原创 2013-03-22 15:04:50 · 2251 阅读 · 0 评论 -
PKU3461(Oulipo)字符串匹配-KMP算法
/*************************************************题目大意:求第一个字符串在第二个字符串中出现的次数;即求主串能与子串进行多少次匹配;算法思想:KMP算法,在发生失配时,文本串不需要回溯;而是利用已经得到的"部分匹配"结果将模式串右移尽可能远的距离,继续进行比较;模式串不一定向右移动一个字符的位置;右移也不一定必须从模式串起点处重原创 2013-03-30 16:05:07 · 1521 阅读 · 0 评论 -
线性时间求最大回文子串的Manacher算法
/****************************************************算法引入:回文串指的是一个正着读和反着读都一样的字符串;要在一个字符串中求出它的长度最长的回文子串;算法思想:Manacher算法可以在O(n)的线性时间复杂度的情况下;求出以每个字符为中心的最长回文子串有多长;该算法把奇数的回文串和偶数的回文串统一起来考虑;大大的减少了奇数原创 2013-03-03 14:59:17 · 1782 阅读 · 0 评论 -
PKU2001(Shortest Prefixes)字符串匹配-Trie树
/*********************************************************题目大意:给出很多字符串,要求找出唯一能识别这个单词的前缀,否则输出该字符串本身;算法思想:建立一个Trie树,设置一个变量num,计算每个字符出现的次数;查找的时候依次从根输出字符串的字符;如果该结点的下一个结点的num为1;则说明下一个字符是第一次出现过的字符;原创 2013-03-27 18:05:21 · 1470 阅读 · 0 评论