获取两个字符串之间最长公共子串的长度
2016-09-09 12:09
337 查看
问题描述:给定两个字符串,编写程序获取两个字符串之间最长公共子串的长度。例如字符串s1= "GCCCTAGCCAGDE",字符串s2="GCGCCAGTGDE",这两个字符串的最长公共子串就是“GCCAG”,其长度为5。
这是来自别人的博客的一个问题。http://http://blog.csdn.net/dyoyo90/article/details/12754597
假设这句话是对的。那么s2里的子字符串一定会在s1里出现。那么s2一定是较短的一个。
别人的博客里写了一些方法。比如把所有的字符串取出逐个比较。所有我觉得用数据库来做比较快。
问题1.
如果单个字符匹配我觉得是很快就能找到的。比如我们找到了A的位置。那么A开头的字串都在这些位置开始。那么A就在S1中匹配两次。这样一次分词就 能把所有的字符位置写出来。得到这样两个个集合,比如SetAZ。SetBZ。做交叉运算。一个字母当然不如两个字母快,如果4比特表示一个字母的话。那么64位不是可以表示16个字符吗。当16个字符完全匹配的时候。我们觉得单次匹配速度会快一些。当1到16个字符都可以匹配时,第17个字符开始的下个字符。也可在SetAZ里面找到。当只匹配了15个字符时候,也是成功的,同时也要把这15个长的字符串加入到SetAZ里面,万一还有这样的呢。那这样的话。更多个字符放在一起不是更好嘛。所以有了加入过程。也就有了删除过程。
问题2.
也可以这样。生成两个自动机。
问题3.
使S1字符串收敛。比如连续的C记录为一个C。两个字符串之间比配。这样匹配上的都是子串。当S1的某段字符串包括了所有可能字符的时候。我们称为一次分组。每组对S2做比较。当每次比较失败后向右滑动。产生可能匹配。
问题4.
如果记录ABBC为一个正序,BA为一个逆序。这样的话。在每个字节8比特的条件下。符号位记录了0或1,后面7位记录了连续长度。连续数个记录为一个序列,这样的话,S1就形成了一个01的序列,同样S2也是这样的01序列,但同样的序列比如同为0100的时候,我们认为是可能匹配。当然,还要比较字符串长度。
问题5.
这是来自别人的博客的一个问题。http://http://blog.csdn.net/dyoyo90/article/details/12754597
假设这句话是对的。那么s2里的子字符串一定会在s1里出现。那么s2一定是较短的一个。
别人的博客里写了一些方法。比如把所有的字符串取出逐个比较。所有我觉得用数据库来做比较快。
问题1.
如果单个字符匹配我觉得是很快就能找到的。比如我们找到了A的位置。那么A开头的字串都在这些位置开始。那么A就在S1中匹配两次。这样一次分词就 能把所有的字符位置写出来。得到这样两个个集合,比如SetAZ。SetBZ。做交叉运算。一个字母当然不如两个字母快,如果4比特表示一个字母的话。那么64位不是可以表示16个字符吗。当16个字符完全匹配的时候。我们觉得单次匹配速度会快一些。当1到16个字符都可以匹配时,第17个字符开始的下个字符。也可在SetAZ里面找到。当只匹配了15个字符时候,也是成功的,同时也要把这15个长的字符串加入到SetAZ里面,万一还有这样的呢。那这样的话。更多个字符放在一起不是更好嘛。所以有了加入过程。也就有了删除过程。
问题2.
也可以这样。生成两个自动机。
问题3.
使S1字符串收敛。比如连续的C记录为一个C。两个字符串之间比配。这样匹配上的都是子串。当S1的某段字符串包括了所有可能字符的时候。我们称为一次分组。每组对S2做比较。当每次比较失败后向右滑动。产生可能匹配。
问题4.
如果记录ABBC为一个正序,BA为一个逆序。这样的话。在每个字节8比特的条件下。符号位记录了0或1,后面7位记录了连续长度。连续数个记录为一个序列,这样的话,S1就形成了一个01的序列,同样S2也是这样的01序列,但同样的序列比如同为0100的时候,我们认为是可能匹配。当然,还要比较字符串长度。
问题5.
相关文章推荐
- 【每天学点算法题10.15】获取两个字符串之间最长公共子串的长度
- 关于公共子串的分析,求两个字符串中所有公共子串个数,以及最长公共子串和长度。
- 求两个字符串中的最长公共子串的长度
- 获取两个字符串之间最长公共字符串的算法(PHP)
- 获取两个字符串之间最长公共字符串的函数
- 求两个字符串的最长公共子串的长度
- 【后缀数组】 POJ 2774 Long Long Message 两个字符串的最长公共子串长度
- 编写函数,获取两段字符串的最长公共子串的长度
- 问题:求两个字符串的最长公共子串。 要求:输入两个字符串,输出它们的最长公共子串,包括长度。
- 求两个字符串最长公共子串的长度
- 求两个字符串的最长公共子串的长度
- 问题:求两个字符串的最长公共子串。 要求:输入两个字符串,输出它们的最长公共子串,包括长度。 设计: 设计一个类 String,包括一个 len(字符串长度)和字符串指针 s。另有如下成员函数: ·
- 给出两个字符串,找到最长公共子串,并返回其长度,java实现
- 求两个字符串公共子串的最长长度
- poj 2774 Long Long Message 求两个字符串的最长公共子串 后缀数组
- 求两个字符串的最长公共子串
- 求两个字符串最长公共子串(LCS问题)
- VB6求两个字符串最长公共子串的问题
- 求两个字符串的最长公共子串
- 找出两个字符串最长公共子串