随笔分类 -  算法--字符串

摘要:后缀数组 DA(倍增)算法求 SA[N] 与 Rank[N] (时间O(NlogN),空间O(N))sa[i] : 表示 排在第i位的后缀 起始下标rank[i] : 表示后缀 suffix(i)排在第几height[i] : 表示 sa[i-1] 与 sa[i] 的LCP 值h[i]: 表示 suffix(i)与其排名前一位的 LCP值const int N = int(2e5)+10;int cmp(int *r,int a,int b,int l){ return (r[a]==r[b]) && (r[a+l]==r[b+l]);}// 用于比较第一关键字与第二关键字,/ 阅读全文
posted @ 2013-08-02 21:51 yefeng1627 阅读(4957) 评论(1) 推荐(1)
摘要:全名: Aho-Corasick 自动机, 类似 Trie + next函数写法: 动态 / 静态, 个人比较偏向与静态内容: 网上一大堆,我是看的 LRJ新版白书214页静态模板:// Aho-Corasick#include<cstdio>#include<cstdlib>#include<cstring>#include<string>#include<queue>#include<algorithm>using namespace std;#define Clear(x) memset(x,0,sizeof(x)) 阅读全文
posted @ 2013-05-23 11:43 yefeng1627 阅读(946) 评论(0) 推荐(0)
摘要:算法内容http://blog.sina.com.cn/s/blog_70811e1a01014esn.html题目直接看输出即可, 注意前后放 ? #, #*. 然后找最大回文串长度应该是 rid[i]*2 + (str[i] =='#')#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>#include<string>using namespace std;const int N = 1024;char s[N];int rid 阅读全文
posted @ 2013-05-20 11:45 yefeng1627 阅读(223) 评论(0) 推荐(0)
摘要:kmp含义 克努斯-莫里斯-普拉特算法,一种字符串查找算法。 字符串算法主要是用于主串 S( s1,s2,s3,...,sn ), 模式串T( t1,t2,...,tm ), 之间的匹配问题. 相对与模式匹配O(n^2)而言:当 Si != Tj 失配时, 主串下标i不回溯, 而是将模式串下标j回溯到合适的地方,再继续比较 Tj ,Si.时间复杂度极端情况是 O(N*M), 但是一般情况下总能保证O(N+M). 假定串 S( i-j+1, i ) 与 模式串 T( 1, j ) 匹配时, Si != Tj 不匹配,此时需j最短回溯到 k, 则存在 T(1,k-1) = T( j-k... 阅读全文
posted @ 2013-04-28 20:41 yefeng1627 阅读(1256) 评论(0) 推荐(0)

Launch CodeCogs Equation Editor