2011-04-18 46 views

回答

0
function strDiff(first, second) { 
    if(first==second) 
     return -1; 
    first = first.toString(); 
    second = second.toString(); 
    var minLen = min(first.length,second.length); 
    for(var i = 0; i<minLen; i++) { 
     if(first.charAt(i) != second.charAt(i)) { 
      return i; 
     } 
    } 
    return minLen; 
} 

返回-1,如果字符串不不同,或者(開始於0)的索引在該他們做的字符(這是最短的字符串的長度,如果他們僅由具有不同的長度不同,例如,「ABCD」和「ABCDEF」將返回4

1

也許這樣的事情?它返回,按順序,第一 區別,如果有任何的位置,最短字符串的長度,如果這些都是不同的,或-1如果一切都相等

function findDiff(a, b) { 
    a = a.toString(); 
    b = b.toString(); 
    for (var i = 0; i < Math.min(a.length, b.length); i++) { 
     if (a.charAt(i) !== b.charAt(i)) { return i; } 
    } 
    if (a.length !== b.length) { return Math.min(a.length, b.length); } 
    return -1; 
} 

感謝菲爾的建議!

+0

如果他們在第一個字符不同,你會得到0,但如果字符串完全匹配,你會得到0.我會返回-1,如果他們匹配。另外,如果b比a短,你會迭代b的結尾,這是不必要的和不明智的 - 也許迭代到兩個長度中的最小值。 – 2011-04-18 06:28:26

+0

@菲爾非常好的一點。我把答案寫在了我的頭上,它顯然有一些缺點。我會相應地編輯它。 – Aleadam 2011-04-18 06:33:17

2

假設,像其他的答案,即匹配字符串返回-1

// Find common prefix of strings a and b. 
 
var prefix = function(a,b){ 
 
    return a && a[0] === b[0] ? a[0] + prefix(a.slice(1), b.slice(1)) : ''; 
 
}; 
 

 
// Find index of first difference. 
 
var diff = function(a,b){ 
 
    return a===b ? -1 : prefix(a,b).length; 
 
}; 
 

 
var tests = [ 
 
    ['Hello World!', 'Hi World!'], 
 
    ['aaabab', 'aaabzbzz'], 
 
    ['', ''], 
 
    ['abc', 'abc'], 
 
    ['qrs', 'tu'], 
 
    ['abc', ''], 
 
    ['', 'abc'] 
 
]; 
 

 
console.log('diff', tests.map(test => diff(test[0], test[1]))); 
 

 
// Or just count up to the first difference 
 
// Trickier nested ternary to handle the -1 however. 
 

 
var diff2 = function(a,b){ 
 
    return a === b ? -1 : a[0] === b[0] ? 1 + diff2(a.slice(1), b.slice(1)) : 0; 
 
}; 
 

 
console.log('diff2', tests.map(test => diff2(test[0], test[1])));

0
function firstDiff(a, b) { 
    var i = 0; 

    while (a.charAt(i) === b.charAt(i)) 
     if (a.charAt(i++) === '') 
      return -1; 

    return i; 
} 

返回位置,其中兩個字符串a和b不同第一或-1,如果它們是等於。

一個更有效,但不易閱讀的版本:

function firstDiff(a, b) { 
    for (var i = 0, c; (c = a.charAt(i)) === b.charAt(i); ++i) 
     if (c === '') 
      return -1; 

    return i; 
} 

如果你覺得你應該首先字符串化的參數,然後做它在調用:

firstDiff(toString(a), toString(b)) 

大多數情況下,這將是一個浪費時間。瞭解你的數據!

相關問題