0

我正在尝试用 Javascript 构建一个文件比较脚本,它需要两个版本的文件并输出类似 Github 的内容,显示添加和删除。不过,我在算法的逻辑上遇到了麻烦。到目前为止,这是我的流程的伪代码:

var j = 0;
// check current file line by line
for(i=0; i < currentFileArr.length; i++){

    // see if the current line is different
    if(currentFileArr[i] !== previousFileArr[j]){

        if(previousFile.contains(currentFileArr[i])){
            // line is a deletion. find next line that wasn't deleted
            while(currentFileArr[i] !== previousFileArr[j]){
                j++;
            }
        } else {
            // line is an addition
        }
    } else { // lines are the same
        j++;
    }
}

主要问题在于不唯一的行。就像新行或只有花括号的行。

4

1 回答 1

1

您需要将文件中的每个唯一行视为元字符,即某些扩展字母表的“字符”。通过这种方式,您的两个文件都将转换为“元字符字符串”。

最有效的方法 - 创建哈希表,包含唯一字符串,并将表中的索引用作元字符。

此后,您可以通过 Levenshtein 算法搜索这些字符串之间的最小编辑序列:

http://www.let.rug.nl/kleiweg/lev/levenshtein.html

http://en.wikipedia.org/wiki/Levenshtein_distance

http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance

于 2013-10-04T21:08:47.810 回答