【发布时间】:2014-01-14 07:24:00
【问题描述】:
我有这两个长度相等的字符串,我需要比较它们。 我想找到重叠基数(。)和内部间隙(*)。下面是例子:
------ACTAAAAATACAAAAA--TTAGCCAGGCGTGGTGGCAC
-----TACTAAAAATACAAAAAAATTAGCCAGGTGTGGTGG---
................**.................
重叠数 = 33。 内部间隙数 = 2。
我没有问题找到重叠的数量。但我有问题 寻找内部差距。以下是我拥有的当前代码。它非常慢。 原则上,我需要计算数百万个这样的对。
#!/usr/bin/perl -w
my $s1 = "------ACTAAAAATACAAAAA--TTAGCCAGGCGTGGTGGCAC";
my $s2 = "-----TACTAAAAATACAAAAAAATTAGCCAGGTGTGGTGG---";
print "$s1\n";
print "$s2\n";
my %base = ("A" => 1, "T" => 1, "C" => 1, "G" => 1);
my $ovlp_basecount = 0;
my $internal_gap = 0;
foreach my $si ( 0 .. length($s1) ) {
my $base1 = substr($s1,$si,1);
my $base2 = substr($s2,$si,1);
# Overlap
if ( $base{$base1} && $base{$base2} ) {
$ovlp_basecount++;
}
# Not sure how to compute internal gap
}
print "TOTAL OVERLAP BASE = $ovlp_basecount\n";
print "TOTAL Internal Gap \?\n";
请建议我如何有效地找到内部差距和重叠。
【问题讨论】:
-
每个字符串中的第 34 个字符不同 (C & T)。这是故意的吗?
-
@Mike:是的,故意的。这叫做不匹配。
标签: string perl bioinformatics