所以我一直在为 Perl 和 Python 做一些练习题(在两者之间进行选择),我遇到了一个问题,我需要像 Github 一样制作自己的差异算法。我已经知道最长公共子序列问题是解决方案的重要组成部分。我使用LCS 的维基百科页面作为参考,但我仍然无法找出差异部分。
我也意识到 CPAN 上已经有像 Algorithm:Diff 这样的模块,但这主要是为了练习,那些感觉像是在作弊。
我想出了算法的python/伪代码版本,但我打算用多维数组来做,而Perl似乎没有。
现在我可以在 Perl 中成功获得最长公共子序列长度了。
基本上我能想到的伪代码(几乎类似于 python,但应该用于 Perl)是这样的:
function lengthOfLCS(string1, string2){
if length(string1) == 0 or length(string2) == 0:
return 0
else if string1[0] eq string2[0]:
return 1+ lengthOfLCS(stringA[1:], stringB[1:])
return max(lengthOfLCS(string1, string2[1:], lengthOfLCS(string1[1:], string2))
我还没有实现它,但我认为这基本上就是我可以计算两个字符串的 LCS 长度的方法?
输出明智,它应该针对“人类”和“黑猩猩”(LCS = HMAN)返回 4
所以我要问的是,从现在开始,我如何才能使用 Perl 打印 Diffs?我知道,我应该返回一个列表/数组,而不是只返回 LCS 的长度,这可以通过在 LCS 函数中返回一个多维列表,然后稍后在单独的 diff 函数中处理它来实现.
我对 Perl 有点陌生,所以任何指针/提示将不胜感激。谢谢。