题目:UVA - 10192Vacation(LIS)
题目大意:求两个字符串的最长公共子串。
解题思路:递推公式: s1【i】 = s2【j】 , l【i】[j] = l[i - 1] [j - 1] + 1;
s1【i]】!= s2【j】 , l【i】【j】 = Max (l[i - 1] [j]...
分类:
其他好文 时间:
2014-08-08 09:38:55
阅读次数:
176
本题要求求一组字符串的最长公共子串,其实是灵活运用KMP快速求最长前缀。
注意肯爹的题意:要求按照字典顺序输出。
还有要提醒的就是:有人也是用KMP来解这道题,但是很多人都把KMP当成暴力法来用了,没有真正处理好细节,发挥KMP的作用。而通常这些人都大喊什么暴力法可以解决本题,没错,的确暴力法是可以解决本题的,本题的数据不大,但是请不要把KMP挂上去,然后写成暴力法了,那样会误导多少后来人啊。...
分类:
其他好文 时间:
2014-08-06 23:12:42
阅读次数:
375
题目大意
给定DNA序列长度m和一个DNA(每单位DNA有AGCT 4种可能)片段,求所有和所给序列最长公共子串长度为0~len的DNA数量
解题思路
在开题的时候以为是数论+组合数学,思路越想越偏……
后来CLJ给出超简要的题解……
听别人的一种按位压缩的思路,就是枚举到该位置之时LCS所对应的位置,若一一对应则该位为1,否则为0
而当我们要处理新的单位DNA时就有一个变换LCS对应的会改变。
则我们枚举所有可能的匹配位置并枚举下一位,算出下一个状态对应的LCS所在位置,按位压缩。...
分类:
其他好文 时间:
2014-08-03 18:10:05
阅读次数:
224
引言子序列和子字符串或者连续子集的不同之处在于,子序列不需要是原序列上连续的值。对于子序列的题目,大多数需要用到DP的思想,因此,状态转移是关键。这里摘录两个常见子序列问题及其解法。例题1, 最长公共子序列我们知道最长公共子串的求法,先温习一下,它的求法也是使用DP思想,对于 字符串s1 和字符串s...
分类:
其他好文 时间:
2014-07-29 13:58:08
阅读次数:
255
题意:输入N个DNA序列,每个DNA序列长度都为60。找到这些串的最长共有子序列。
注:若找不到,或最长子序列长度小于2,则输出no significant commonalities,否则输出最长公共子串,若长度相同输出字典序最小的
思路:暴力枚举第一个DNA序列的每一个子序列,用strstr()函数与其余的序列进行匹配...
分类:
其他好文 时间:
2014-07-26 02:50:36
阅读次数:
162
1,两个字符串的最长公共子串基本思想是扫描两次矩阵,第一次进行字符比较;第二次找出对角线为1的最长长度package com.bobo.interview;import com.bobo.util.MetrixPrint;/** * 这个类实现的功能室查找两个字符串的最长公共子串(要求连续) * ....
分类:
其他好文 时间:
2014-07-21 14:15:04
阅读次数:
204
uva111:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=47题意:看懂之后就是求两个串的最长公共子串。题解:不过这里要注意一下,...
分类:
其他好文 时间:
2014-07-16 16:05:53
阅读次数:
213
经典题目,求两个串的最长公共子串。是这样来做的。以第一个串构造SAM,第二个串在自动机上跟新一遍就可以了。更新的过程是这样的,假设当前到达的状态点为x(初始状态为0点),下一个字符是c,如果当前状态没有c这条边就一直沿着pre指针走,直到找到第一个有c这条边的状态或者确认全部都没有。更新是这样的,用...
分类:
其他好文 时间:
2014-06-20 18:40:05
阅读次数:
207
其实做起来会感觉很简单,需要注意的是要考虑效率的问题,毕竟可能是很长的字符串数组,所以可以考虑选取所有字符串中最短的那个来首先进行比较,因为最长公共子串肯定不会大于其长度,这样避免了字符串之间长度差异很大造成的效率损失,然后每次比较之后最长公共子串的长度也永远不会大于最短的那个字符串,只会不变或相等,只要遍历字符串数组,挨个对比、更改最短公共字符串记录即可,code如下:...
分类:
其他好文 时间:
2014-06-11 06:58:55
阅读次数:
226