引入:最长公共子序列常用于解决字符串的相似度问题。最长公共子序列(LongestCommonSubsequence,LCS)与最长公共字串(LongestCommonSubstring):子串是串的一个连续的部分,子序列则是从不改变序列顺序,而从序列中去掉任意多个元素而获得的新的序列;也就是说,子串...
分类:
其他好文 时间:
2014-07-22 23:12:35
阅读次数:
357
code如下:
//Longest common sequence, dynamic programming method
void FindLCS(char *str1, char *str2)
{
if(str1 == NULL || str2 == NULL)
return;
int length1 = strlen(str1)+1;
int length2 = strlen(...
分类:
其他好文 时间:
2014-05-26 04:56:50
阅读次数:
215
题目:http://poj.org/problem?id=1226
http://acm.hdu.edu.cn/showproblem.php?pid=1238
其实用hash+lcp可能也可以,甚至可能写起来更快,不过我没试,我最近在练习后缀数组,所以来练手
后缀数组的典型用法之一----------------后缀数组+lcp+二分
思路:1、首先将所有的字符串每读...
分类:
其他好文 时间:
2014-05-22 17:14:08
阅读次数:
289
动态规划算法,在T大某位老师的书中说就是递推+重复子问题。动态规划算法的效率主要与重复子问题的处理有关。典型的题目有
陪审团,最大公共子串问题1,最大公共子串问题这个是动态规划的基础题目。动态规划就是递推和重复子结构。确定了递推关系后。找到一个能极大地减少重复运算的子结构至关重要。选的好了,时间效率...
分类:
其他好文 时间:
2014-05-17 23:19:03
阅读次数:
367
Codeforces Round #244 (Div. 2)D (后缀自动机)
(标号为0的节点一定是null节点,无论如何都不能拿来用,切记切记,以后不能再错了)
这题用后缀自动机的话,对后缀自动机的很多性质有足够深刻的理解。没想过后缀数组怎么做,因为不高兴敲。。。。
题意:给出两个长度均不超过5000的字符串s1,s2,求这两个串中,都只出现一次的最短公共子串。
解题思路:求的是公共子...
分类:
其他好文 时间:
2014-05-10 09:17:40
阅读次数:
313
一.最长公共子序列(LCS Longest Common
Subsequence)第一,先说区别,最长公共子串和最长公共子序列是不一样的。最长公共子串不许是连续的,而最长公共子序列可以是不联系的。网络上解释的子序列:一个字符串S,去掉零个或者多个元素所剩下的子串称为S的子序列。最长公共子序列就是寻找...
分类:
其他好文 时间:
2014-05-10 01:12:20
阅读次数:
370
题意:给出1-10个长度为60的字符串,求出最长的公共子串(长度不能小于3),如果有多个一样长的,输出字典序最短的。
解法:想到kmp时,自己第一反应枚举第一个串的所有子串,在其他所有串中走一遍kmp,复杂度为10*60*60*60,但是发现只需枚举第一个串后缀就可以,每次枚举记录在所有串能走最远中走的最短的那个长度。这样复杂度就成了10*60*60,0ms AC。
代码:/*****...
分类:
其他好文 时间:
2014-05-06 22:41:38
阅读次数:
320