2016-07-04 51 views
-3

任何人都可以將字符串的delta編碼的代碼。Delta編碼 - 字符串(編程邏輯 - 沒有特定的語言)

例如,如果初始字符串

「貓和狗」

和後來的字符串是

「貓和狗」

我應該能夠獲得字符串版本之間的區別非常有效。如果任何人都可以將代碼放在這裏,那麼可以用非常少的數據以增量編碼發送非常大的段落。

+0

不知道你在問什麼。也許你應該谷歌''差異'..如果這就是你的意思..那麼,這是什麼,但微不足道的,即使它__這樣的人眼!見[這裏](http://stackoverflow.com/questions/24887238/how-to-compare-two-rich-text-box-contents-and-highlight-the-characters-that-are/24970638?s=1 | 0.2755#24970638)在執行中應該明確指出,差異沒有任何「非常有效」,並且沒有人可以或將「在此處放置代碼」。 – TaW

+0

我正在尋找一種邏輯來構建最終字符串舊字符串和三角洲(舊版本和新版本之間的區別)。三角洲的尺寸必須很小,以便我可以輕鬆地轉移大段落。 –

+0

祝你好運。當你有代碼需要幫助時回來.. – TaW

回答

1

我找到了答案,我想分享給所有人。

var oldString = "This is just a sample of string to test the delta encoding. Infact, with my own login.dsfdsfdsfdsfsdfsdfdsfdsfsdfsdfds dsfds fds fddsf"; 
var newString = "dsfdsThissdf is just a sample of string to test X the dedsfdsflta encoding sdfds decoding. Infact, with my own sadsadsadsad" 
var result = ""; 

var changes = getChanges(oldString, newString); 
var string = getOriginal(oldString, changes); 

function getChanges(os, ns) { 
    var addedIndex = false; 
    var changes = []; 
    var obj = []; 
    var oi = 0, ni = 0; 
    while (oi < oldString.length && ni < newString.length) { 
     if (newString.charAt(ni) != oldString.charAt(oi)) { 
      if (!addedIndex) { 
       obj.push(oi); 
       obj.push(newString.charAt(ni)); 
       addedIndex = true; 
      } 
      else { 
       obj[1] += newString.charAt(ni); 
      } 
      ni++; 
     } 
     else { 
      if (addedIndex) { 
       changes.push(obj); 
       obj = []; 
       addedIndex = false; 
      } 
      oi++; 
      ni++; 
     } 
    }; 
    if (addedIndex) { 
     changes.push(obj); 
     obj = []; 
     addedIndex = false; 
    } 
    obj = []; 
    if (ni == newString.length) { 
     obj.push(-1 * oi); 
     changes.push(obj); 
    } 
    if (oi == oldString.length) { 
     obj.push(ni); 
     obj.push(newString.substring(ni)); 
     changes.push(obj); 
    } 
    return changes; 
} 

function getOriginal(os, changes) { 
    var result = os; 
    for (var i = changes.length - 1; i >= 0 ; i--) { 
     if (changes[i][0] < 0) { 
      result = result.substring(0, -1 * changes[i][0]); 
     } 
     else { 
      result = result.substring(0, changes[i][0]) + changes[i][1] + result.substring(changes[i][0]); 
     } 
    }; 
    return result; 
} 

console.log(string); 
console.log(newString);