比较多个子串

时间:2010-09-29 19:25:42

标签: java substring dna-sequence

我正在尝试编写一个基本的dna音序器。在那里,给定两个相同长度的序列,它将输出相同的字符串,最小长度为3。 所以输入

abcdef dfeabc

将返回

1 abc

我不确定如何解决这个问题。 我可以比较两个字符串,看看它们是否完全相同。从那里,我可以比较长度为1的字符串大小,即如果dfeabc包含abcde。但是,如何让程序执行所有可能的字符串,最小为3个字符? 一个问题是上面的长度为1的例子,我还必须做字符串bcdef并比较它。

3 个答案:

答案 0 :(得分:1)

天真的方法是获取字符串A的每个子字符串并查看它是否在字符串B中。

这是天真的做法:

for ( int i = 0; i < a.length; i++ ) {
   for ( int j = i+1; j <= a.length; j++ ) {
       if (b.contains(a.substring(i, j))) {
           //if longer than last found match, record this match
       }
   }
}

稍微更优化的方法是先查看更长的子串,这样匹配的第一个子串必然是最长的。

for ( int length = a.length; length > 0; length-- ) {
     for ( int i = 0; i + length < a.length; i++ ) {
         if ( b.contains(a.substring(i, i+length)) ) {
             //this is the biggest match
         }
     }
}

答案 1 :(得分:0)

如果你想以一种简单的方式解决这个问题,而不使用任何Java API进行搜索,你可以这样想:对于第一个字符串中的每一对可能的起始索引和第二个字符串中的j,步骤在第一个和第二个字符串中的相应字符相等的情况下转发,如果您至少执行了3个步骤,则返回结果。

答案 2 :(得分:0)

您需要使用最长公共子串算法,这是一个动态编程问题。检查维基百科的entry以获取算法的解释,并here查看示例实现。