获取两个字符串 a 和 b 的最长公共子串,时间复杂度 O(mn),空间复杂度 O(n),其中 a 的字符串长度为 m,b 的字符串长度为 n。
function lcs(a, b) { var ai, al = a.length, bi, bl = b.length - 1, maxBi, max = 0, val, row = [], ret = []; for (ai = 0; ai < al; ai++) { for (bi = bl; bi > -1; bi--) { val = a[ai] == b[bi] ? 1 : 0; if (val) { if (row[bi - 1]) { val += row[bi - 1]; } if (val > max) { max = val; maxBi = bi; } } row[bi] = val; } } for (; max > 0; max--, maxBi--) { ret.unshift(b[maxBi]); } return ret.join(''); }