保誠-保戶業務員媒合平台
Tomas
2022-05-19 957a1f10a06fdbb76f1a0ba94fe44126c613fee3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
'use strict';
const array = [];
const charCodeCache = [];
 
const leven = (left, right) => {
    if (left === right) {
        return 0;
    }
 
    const swap = left;
 
    // Swapping the strings if `a` is longer than `b` so we know which one is the
    // shortest & which one is the longest
    if (left.length > right.length) {
        left = right;
        right = swap;
    }
 
    let leftLength = left.length;
    let rightLength = right.length;
 
    // Performing suffix trimming:
    // We can linearly drop suffix common to both strings since they
    // don't increase distance at all
    // Note: `~-` is the bitwise way to perform a `- 1` operation
    while (leftLength > 0 && (left.charCodeAt(~-leftLength) === right.charCodeAt(~-rightLength))) {
        leftLength--;
        rightLength--;
    }
 
    // Performing prefix trimming
    // We can linearly drop prefix common to both strings since they
    // don't increase distance at all
    let start = 0;
 
    while (start < leftLength && (left.charCodeAt(start) === right.charCodeAt(start))) {
        start++;
    }
 
    leftLength -= start;
    rightLength -= start;
 
    if (leftLength === 0) {
        return rightLength;
    }
 
    let bCharCode;
    let result;
    let temp;
    let temp2;
    let i = 0;
    let j = 0;
 
    while (i < leftLength) {
        charCodeCache[i] = left.charCodeAt(start + i);
        array[i] = ++i;
    }
 
    while (j < rightLength) {
        bCharCode = right.charCodeAt(start + j);
        temp = j++;
        result = j;
 
        for (i = 0; i < leftLength; i++) {
            temp2 = bCharCode === charCodeCache[i] ? temp : temp + 1;
            temp = array[i];
            // eslint-disable-next-line no-multi-assign
            result = array[i] = temp > result ? temp2 > result ? result + 1 : temp2 : temp2 > temp ? temp + 1 : temp2;
        }
    }
 
    return result;
};
 
module.exports = leven;
// TODO: Remove this for the next major release
module.exports.default = leven;