给定两个字符串,我想找到指定长度的所有常见子串,但允许一个字符不同。
例如,如果s1是'ATCAGC'
,s2是'ATAATCGAC'
,而指定的长度是3
,那么我想要沿着这些行输出:
ATC from s1 matches ATA, ATC from s2
TCA from s1 matches TAA, TCG from s2
问题
答案 0 :(得分:3)
首先,谷歌搜索“perl hamming distance”的结果发现perlmonks thread提到了Text::LevenshteinXS,各种典型实现,以及一个可爱的xor技巧:
sub hd{ length( $_[ 0 ] ) - ( ( $_[ 0 ] ^ $_[ 1 ] ) =~ tr[\0][\0] ) }
如果不熟悉Levenshtein距离或汉明距离,您应该在String metrics上浏览维基百科文章。