Самый быстрый способ найти позиции несоответствия между двумя строками одинаковой длины
У меня есть миллионы пар строк одинаковой длины, которые я хочу сравнить и найти позицию, в которой есть несоответствия.
Например для каждого$str1
а также$str2
мы хотим найти несоответствующую позицию с$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
Есть ли быстрый способ сделать это. В настоящее время у меня есть метод стиля C, который я зацикливаю каждую позицию в обеих строках, используя функцию substr. Но этот подход ужасно медленный.
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;
}
}