2013-01-23 51 views
1

我想在javascript中编写两个字符串,并且需要找到与其他字符串不同的确切位置。Javascript/Extjs 4字符串比较

例如

StingA= "a;b;c;" 
StringB="a;bc;" 
从上述StringB

现在是在现在的位置3 ..即从StringA不同 “;”在位置3缺失[如果我们开始计数a = 0,= 1,b = 2];

我无法用文字比较字符,因为可能有非常大的字符串即StringA = “A,B,C,d,E,F;克; ......”

能否请您为我提供解决方案?

回答

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

如果你绝对需要的性能,你可以尝试基于已知位置的启发式方法“;” (如你的例子,如果你知道它交替字母和分号,你可能会检查其他字符)。

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