我想在javascript中比较两个字符串,并且需要找到与其他字符串不同的确切位置。
例如
StingA= "a;b;c;"
StringB="a;bc;"
现在从上面的 StringB 不同于 StringA 在位置 3 .. 即“;” 在位置 3 处丢失 [如果我们开始计算 a=0,;=1,b=2];
我不能逐个字符比较,因为可能有很大的字符串,即 StringA="a;b;c;d;e;f;g; ....."
你能给我解决方案吗?
我想在javascript中比较两个字符串,并且需要找到与其他字符串不同的确切位置。
例如
StingA= "a;b;c;"
StringB="a;bc;"
现在从上面的 StringB 不同于 StringA 在位置 3 .. 即“;” 在位置 3 处丢失 [如果我们开始计算 a=0,;=1,b=2];
我不能逐个字符比较,因为可能有很大的字符串,即 StringA="a;b;c;d;e;f;g; ....."
你能给我解决方案吗?
除非您已经对算法进行了概要分析并确定它太慢,否则不要担心优化性能。首先获得一个可行的算法,然后在需要时对其进行分析。
// Returns the index of the first difference between strings a and b,
// or -1 if the strings are equal. Case-sensitive.
function indexOfDiff(a, b) {
if(a === b) {
return -1;
}
var len = Math.min(a.length, b.length);
for(var i = 0; i < len; i++) {
if(a.charAt(i) !== b.charAt(i)) {
return i;
}
}
return len;
}
如果您绝对需要性能,您可以尝试基于“;”的已知位置的启发式方法 (如在您的示例中,如果您知道它交替使用字母和分号,则可以检查所有其他字符)。
或者对于非常大的字符串,您可以尝试递归二进制搜索。将一个字符串分成两半,并检查与另一个字符串的等效子字符串是否相等。如果相等,检查另一半。如果不相等,则将该字符串分成两半并重复该过程,直到您缩小了要检查的合理大小的子字符串。这种方法会更加复杂且容易出错,因此请先尝试更简单的方法。