最长公共子串 思路: 使用dp数组,当i=0||j=0时 c[i,j]=0,当xi=yj时,c[i,j]=c[i-1,j-1]+1,当xi!=yj时,c[i,j]=0。 1 /** 2 * @author: wooch 3 * @create: 2020/02/12 4 * 最长公共子串 5 * 核 ...
分类:
其他好文 时间:
2020-02-12 18:31:56
阅读次数:
52
回文字符串 思路:由于要找最少添加的字符使得原字符串变为回文串,那么先将给出的字符串反转,将两字符串做 LCS,得到的是最大的公共子串的长度,那么用字符串长度减去最大公共子串长度就是最少添加字符的个数 1 #include <iostream> 2 #include <cstdio> 3 #incl ...
分类:
其他好文 时间:
2020-01-31 10:47:06
阅读次数:
98
本文的图片材料多数来自$\mathrm{hihocoder}$中详尽的$SAM$介绍,文字总结为原创内容。 确定性有限状态自动机 DFA 首先我们要定义确定性有限状态自动机$\mathrm{DFA}$,一个有限状态自动机可以用一个五元组$(\mathrm{S},\Sigma,\mathrm{st}, ...
分类:
其他好文 时间:
2020-01-08 23:21:09
阅读次数:
152
Description 求若干个串的最长的公共子串的长度。 Solution 考虑将这若干个串全部拼起来,中间用一些不在字符集内的符号隔开。 然后二分答案 $K$,如果连续的一段 $height$ 都大于等于 $K$,且每个串都出现了至少一次,则是可行的。 Code ...
分类:
编程语言 时间:
2020-01-07 13:02:28
阅读次数:
77
Description 求两个字符串的最长公共子串。 Solution 把两个字符串拼起来,问题就转化为了求任意两个后缀的 $lcp$ 的最大长度。 显然这个最大长度是 $height_i$ 的值,$\text{SA}$ 求解即可。 需要注意的是,对于 $height_i$ 需要判断一下 $SA_i ...
分类:
编程语言 时间:
2020-01-06 23:04:17
阅读次数:
96
C#中的近似字符串比较 该项目中包含的算法 海明距离| https://baike.baidu.com/item/%E6%B5%B7%E6%98%8E%E8%B7%9D%E7%A6%BB/4235876?fr=aladdin 提卡距离| http://en.wikipedia.org/wiki/Ja ...
分类:
其他好文 时间:
2020-01-03 14:00:46
阅读次数:
94
http://acm.hrbust.edu.cn/vj/index.php?c=problem-problem&id=20480 LCS求最长公共子串 #include<stdio.h> #include<iostream> #include<map> #include<string.h> #inc ...
分类:
其他好文 时间:
2019-12-19 13:24:24
阅读次数:
110
"题意" 显然加上一个数相等就是差分数组相等,于是问题变为求几个串的最长公共子串。 这里我学习了如何用SA求LCS。 首先问题要转化成求一些后缀的最长公共前缀,要求这些后缀分属不同的串。 于是二分答案,于是问题就变成求一段连续的$height$数组,它们都$\geqslant mid$,并且至少分属 ...
分类:
其他好文 时间:
2019-12-17 22:11:56
阅读次数:
133
首先,height[i]-k+1 很好理解把,他是说明目前这对后缀中不小于k的公共子串个数。 题解说用单调栈维护,为什么要用单调栈维护呢?因为时间复杂的可以大大降低。 怎么个降低方法呢? 在之前学习lcp(就是height数组)的时候,肯定接触过这样一个问题,就是从i开始的后缀字符串跟从j开始的后缀 ...
分类:
编程语言 时间:
2019-12-11 00:25:25
阅读次数:
78
询问相当于要求长度为k的公共子串个数,很容易联想到hash,由于询问是对全局的,因此对全局开一个hash的桶对于合并/删除操作,将中间新产生/需要删除的字符串暴力修改即可,单次复杂度最坏为$o(k^{2})$这样看上去复杂度是$o(nk^{2})$的,但考虑最终的字符串总数$o(nk)$,删除操作最 ...
分类:
其他好文 时间:
2019-11-27 19:30:44
阅读次数:
120