我正在 exercism.io 上进行练习,第三个练习要求我们比较两个 DNA 字符串并返回它们之间的差异(汉明距离)。
例如:
GAGCCTACTAACGGGAT
CATCGTAATGACGGCCT
^ ^ ^ ^ ^ ^^
在该比较中排列了 7 个不同的 Angular 色。我的问题是我是否采取了正确的方法来解决这个问题。我创建了两个空数组,创建了一个循环遍历两个字符串并在它们相遇时推送不同字母的函数。
我尝试通过控制台运行它,但总是收到意外的输入错误。
var diff = [];
var same = [];
function ham(dna1, dna2) {
for (var i = 0; i < dna1.length; i++)
for (var j = 0; j < dna2.length; i++){
if (dna1[i] !== dna2[j]) {
console.log(dna1[i]);
diff.push(dna1[i]);
}
else {
console.log(dna1[i]);
same.push(dna1[i]);
}
return diff.length;
}
ham("GAGCCTACTAACGGGAT", "CATCGTAATGACGGCCT");
console.log("The Hamming distance between both DNA types is " + diff.length + ".");
最佳答案
不要使用全局变量。
如果没有必要,请勿使用嵌套循环。
不要在数组中存储无用的东西。
function ham(dna1, dna2) {
if (dna1.length !== dna2.length) throw new Error("Strings have different length.");
var diff = 0;
for (var i = 0; i < dna1.length; ++i) {
if (dna1[i] !== dna2[i]) {
++diff;
}
}
return diff;
}
var diff = ham("GAGCCTACTAACGGGAT", "CATCGTAATGACGGCCT");
console.log("The Hamming distance between both DNA types is " + diff + ".");
关于javascript - 使用两个 for 循环来比较两个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41524474/