Schnellster Weg, um Mismatch-Positionen zwischen zwei Strings gleicher Länge zu finden
Ich habe Millionen von Saitenpaaren mit der gleichen Länge, die ich vergleichen möchte, und finde die Position, an der sie nicht übereinstimmen.
Zum Beispiel für jeden$str1
und$str2
Wir wollen eine Fehlpaarungsposition mit finden$str_source
:
$str_source = "ATTCCGGG";
$str1 = "ATTGCGGG"; # 1 mismatch with Str1 at position 3 (0-based)
$str2 = "ATACCGGC"; # 2 mismatches with source at position 2 and 7
Gibt es einen schnellen Weg, dies zu tun? Momentan habe ich die C-Style-Methode, mit der ich jede Position in beiden Strings mit der 'substr'-Funktion schleife. Aber dieser Ansatz ist schrecklich langsam.
my @mism_pos;
for $i (0 .. length($str_source)) {
$source_base = substr($str_source,$i,1);
$str_base = substr($str2,$i,$1);
if ($source_base ne $str_base) {
push @mism_pos,$i;
}
}