1

我想在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; ....."

你能给我解决方案吗?

4

1 回答 1

0

除非您已经对算法进行了概要分析并确定它太慢,否则不要担心优化性能。首先获得一个可行的算法,然后在需要时对其进行分析。

// 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;
}

如果您绝对需要性能,您可以尝试基于“;”的已知位置的启发式方法 (如在您的示例中,如果您知道它交替使用字母和分号,则可以检查所有其他字符)。

或者对于非常大的字符串,您可以尝试递归二进制搜索。将一个字符串分成两半,并检查与另一个字符串的等效子字符串是否相等。如果相等,检查另一半。如果不相等,则将该字符串分成两半并重复该过程,直到您缩小了要检查的合理大小的子字符串。这种方法会更加复杂且容易出错,因此请先尝试更简单的方法。

于 2013-01-23T19:00:38.820 回答