![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
字符串匹配
文章平均质量分 74
gg_gogoing
这个作者很懒,什么都没留下…
展开
-
Trie树模板
百度资料一大堆,编码过程中要注意这几个数组维护(貌似ACM中树都是用数组——线段树,脸是前向星实现的) int sz;//节点编号,累加量 int ch[Word_Len][sigma_size];//Trie树 int Have_Word[Word_Len];//该节点下的单词个数 int val[Word_Len];//路径长度 int pre[Wor原创 2014-11-17 12:51:01 · 837 阅读 · 0 评论 -
git diff java 实现
经常使用git diff 但是其是如何实现的呢? 本博客简单实现不考虑行的比较。可以比较两个字符串// 相当于把每一行换比较换成字符比较,道理一样s1='xxxxxxxxxx's2='yyyyyyyyyy'首先我们把文件转化为两个列表,列表的每个元素是文件的某一行:A = [1行、2行、3行、4行、…] B = [1行、2行、3行、4行、…] 然后我们计算A和B最长的相似元素的长度lcs(原创 2016-06-17 11:59:41 · 4173 阅读 · 0 评论 -
字符串(2)- AC自动机
AC自动机,其实就是Trie树与KMP的结合,且有dfa(有限状态机)的性质.理解的关键点:1. fail指针 起到回溯作用2.每次匹配都是主串不动,移动指针now去回溯找后缀的前缀3.一个优化点,将NULL指向root 编码更简单.考察时一般也会问道dfa的性质.AC自动机解决问题:1.多模式串匹配2.给定一个长度,满足XX条件能构造多少个.ABCD原创 2015-03-18 13:05:02 · 614 阅读 · 0 评论 -
最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离
http://www.cnblogs.com/zhangchaoyang/articles/2012070.html把一个问题转换为若干个规模更小的子问题,并且都借助于一个二维矩阵来实现计算。约定:字符串S去掉最后一个字符T后为S',T1和T2分别是S1和S2的最后一个字符。则dist(S1,S2)是下列4个值的最小者:1.dist(S1',S2')--原创 2015-04-26 08:57:11 · 717 阅读 · 0 评论 -
LCS LIS LCIS 字符串编辑距离 专题
题目地址原创 2014-11-02 08:00:38 · 945 阅读 · 0 评论 -
字符串(1)---KMP & 扩展KMP & Manacher
字符串也是ACM中的重头戏,基本内容有KMP ,扩展KMP, Manacher ,AC自动机,后缀数组,后缀自动机.按照专题来做共分三部分. LCS LIS LCIS不知道算不算....点击打开链接小技巧:匹配问题不区分大小写,则将其全部转为小写.暴力匹配: 用strstr函数就能解决 I M N Z(枚举长度 三份)一.KMP算法解决单一模式串匹配问题.利用失配后原创 2015-03-15 10:56:56 · 831 阅读 · 0 评论 -
后缀数组模板(理解)
字符串的处理真可谓是博大精深,后缀数组这种数据结构我花了两天时间才明白了其构造的过程。主要是代码不好理解。数据结构:1.sa数组,就是后缀数组,按照字典序排列,其意义为:sa[i]=k,排第i名的子串是从k位开始的。2.rank名次数组,其意义为:rank[i]=k,以i为起点的子串排名为k。很容易看出来两者可以相互转化。求这两个数组的过程是基于基数排序,计数排序的方法。下原创 2014-11-22 08:20:30 · 542 阅读 · 1 评论 -
KMP模板
关于字符串的AC自动机,KMP,Trie树,后缀数组。KMP是基础。当一个字符串与模式串匹配的时,若失配,利用前面匹配的信息,利用三部分连等关系。可以滑动的“恰如其分”。Next数组的求法:若此时求的是next[i]的数值,j位置之前的与从i开始后j-1个字符都是匹配的,若s[i]==s[j] 那么next[++i]=++j; 若不相等可以j=next[j]滑动回去。OK,那么什么原创 2014-11-17 19:26:26 · 589 阅读 · 0 评论 -
后缀数组理解
参考PDF cnblog gitbook 计数排序和基数排序都用到了第一步和每次求sa都用到了 基数是在第一关键字和第二关键字时用到 for(p=0,i=n-j;i<n;i++) y[p++]=i; for(i=0;i<n;i++) if(sa[i]>=j) y[p++]=sa[i]-j; y的内容是按照第二关键字排序结果(内容是下标),第一句是因为小于长度的没有第一关键字 ,所以排原创 2016-11-18 22:14:07 · 388 阅读 · 0 评论