我只需要計算兩個字符串之間的不匹配。假設:兩個字符串之間perl計數不匹配
my $s1 = "ATCG";
my $s2 = "ATTG";
這應該給:1作爲不匹配。無需找到位置或錯配。
我正在尋找快速的方法。我認爲分裂成數組和循環匹配或使用substr匹配每個位置可能會很慢,因爲需要檢查超過十億對。謝謝
我只需要計算兩個字符串之間的不匹配。假設:兩個字符串之間perl計數不匹配
my $s1 = "ATCG";
my $s2 = "ATTG";
這應該給:1作爲不匹配。無需找到位置或錯配。
我正在尋找快速的方法。我認爲分裂成數組和循環匹配或使用substr匹配每個位置可能會很慢,因爲需要檢查超過十億對。謝謝
只是XOR兩個字符串在一起。結果中的每個NUL字符表示兩個字符串中字符相同的位置。
my ($s1, $s2) = qw(ATCG ATTG);
my $count = ($s1^$s2) =~ tr/\0//c;
print "$count\n"; # Prints "1"
注意:如果你要反覆比較字符串,通過它和一個到你比較它與utf8::downgrade
就是確保^
一樣快,因爲它可以。
utf8::downgrade($s1); # Change the internal format in which
utf8::downgrade($s2); # the strings are stored to speed up $s1^$s2.
如果任一字符串包含U + 00FF以上的UNICODE字符,這是無用/浪費的。
兩個輸入的長度是否相同?如果沒有,「ABCD」和「ACD」的區別是1還是別的?即使如此,「ABCDEF」和「ACDEFB」的區別是2,5還是別的? – hobbs
如果你同意的東西多一點http://search.cpan.org/dist/Text-Levenshtein/lib/Text/Levenshtein.pm – Sobrique